2015-11-18 102 views
1

我想實現這個相反: Gson serialize POJO with root value included?GSON反序列化POJO包括

我得到一個JSON字符串

{"RootDTO":{"classField_01":"value"}} 

,並希望deserialise,要

class RootDTO { 
    String classField_01; 
    //nice getter and setter are included 
} 

我知道如何設置參數,以便在序列化時將根元素包含到JSON字符串中。 但現在如何反序列化?已經像地獄一樣搜索,但無法找到合適的答案。

謝謝你的任何想法!

+0

我想這是你要找的東西:http://stackoverflow.com/questions/12004338/skip-root-element-while-deserializing-json – aurelianr

回答

0

使RootDTO.java

import com.google.gson.annotations.SerializedName; 

public class RootDTO { 

    @SerializedName("classField_01") 
    private String classField_01; 

    public String getClassField_01() { 
     return classField_01; 
    } 

    public void setClassField_01(String classField_01) { 
     this.classField_01 = classField_01; 
    } 
} 

使Response.java

import com.google.gson.annotations.SerializedName; 

public class Response { 

    @SerializedName("RootDTO") 
    private RootDTO rootDTO; 

    public RootDTO getRootDTO() { 
     return rootDTO; 
    } 

    public void setRootDTO(RootDTO rootDTO) { 
     this.rootDTO = rootDTO; 
    } 
} 

測試此代碼來生成您的JSON數據與此代碼

產生

import com.google.gson.Gson; 

public class TestOne { 
    public static void main(String[] args) { 

     RootDTO dto = new RootDTO(); 
     dto.setClassField_01("value"); 
     Response response = new Response(); 
     response.setRootDTO(dto); 

     String result = (new Gson()).toJson(response); 
     System.out.println(""+result); 
    } 
} 

輸出0

{"RootDTO":{"classField_01":"value"}} 
+0

嗨Pankaj,謝謝你的評論。但我想要另一種方式,並且最好有一個解決方案,我不需要創建額外的課程。但是,也許我可以製作一個泛型類型的Response類 - 可能會起作用。 你的方式btw更容易實現:mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true); – Manuel

+0

@曼紐爾,你說得對,我已經看到SimpleFramework的工作,但它只是** xml **解析,我希望我可以幫你,顯然Gson有不同的方法在尋找** JSON **數據。如果我學會做你想做的事情,我會通知你。 –