1

我有这个实体

class Foo
{
   public String FooName;
   public String FooId;
}

我从一个方法中得到一个数组,Foo然后像这样将它序列化为 json 字符串

Foo[] foos = getFoos();
String json = gson.toJson(foos, Foo[].class);

这会产生

[
    {
       "FooName" : "FirstFoo",
       "FooId" : "1"
    },
    {
       "FooName" : "SecondFoo",
       "FooId" : "2"
    }
]

这很好,除了我需要有这样的包装器属性

{
  "foos":[
            {
               "FooName" : "FirstFoo",
               "FooId" : "1"
            },
            {
               "FooName" : "SecondFoo",
               "FooId" : "2"
            }
         ]
}

我知道我可以创建一个包装类

class Foos
{
    Foo[] foos;
}

并将 Foos.class 与 gson 一起使用,但我有 100 个类似的类Foo,我不想为每个类创建一个包装类。我还在考虑对返回的原始 json 进行一些字符串操作以添加包装器属性,但我将其保留用于计划 B(甚至 C)。所以,我想知道 gson 中是否有办法添加一个包装器属性,就像我上面问的那样。

谢谢。

4

2 回答 2

2

这是一种手动方法:

final Gson gson = new Gson();
final Foo[] foos = new Foo[] {};

final JsonElement elem = gson.toJsonTree(foos);
final JsonObject jsonObj = new JsonObject();
jsonObj.add("foo", elem);
System.out.println(jsonObj.toString());
于 2013-03-06T01:45:16.910 回答
1
JsonObject obj = new JsonObject();          
obj.add("foos", gson.toJsonTree(foos, Foo[].class));            
String json = obj.toString();
于 2013-03-06T01:46:10.940 回答