[英]Gson serialize POJO with root value included?
我在使用Gson序列化對象時遇到問題。
@XmlRootElement
class Foo implements Serializable {
private int number;
private String str;
public Foo() {
number = 10;
str = "hello";
}
}
Gson會將其序列化為JSON
{"number":10,"str":"hello"}
。
但是,我希望它是
{"Foo":{"number":10,"str":"hello"}}
,
所以基本上包括頂級元素。 我試圖谷歌一種方式在Gson做到這一點,但沒有運氣。 任何人都知道是否有辦法實現這一目標?
謝謝!
您需要在對象樹的頂部添加元素。 像這樣的東西:
Gson gson = new Gson();
JsonElement je = gson.toJsonTree(new Foo());
JsonObject jo = new JsonObject();
jo.add("Foo", je);
System.out.println(jo.toString());
// Prints {"Foo":{"number":10,"str":"hello"}}
您可以執行以下操作,而不是硬編碼類型:
...
jo.add(Foo.getClass().getSimpleName(), je);
更好的方法是創建一個包裝類,然后在其中創建一個Foo
對象。
示例代碼:
public class ResponseWrapper {
@SerializedName("Foo")
private Foo foo;
public Foo getFoo() {
return foo;
}
public void setFoo(Foo foo) {
this.foo= foo;
}
}
然后您可以使用以下命令輕松解析為JSON:
new GsonBuilder().create().toJson(responseWrapperObj);
這將為您提供所需的結構:
{"Foo":{"number":10,"str":"hello"}}
如果您使用Jackson api,請使用以下行
mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true); mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE,true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.