Gson 序列化包含根值的 POJO?

2022-09-01 18:50:41

我在使用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中做到这一点,但没有运气。有谁知道是否有办法实现这一目标?

谢谢!


答案 1

您需要在对象树的顶部添加该元素。像这样:

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"}}

答案 2

无需对类型进行硬编码,您可以执行以下操作:

...
jo.add(Foo.getClass().getSimpleName(), je);