Gson序列化包含根值的POJO?

我在使用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);