2015-11-18 64 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 **数据。如果我学会做你想做的事情,我会通知你。 –