2013-03-06 87 views
1

我有这样的实体GSON属性名集合

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但​​我有类数百个像Foo和我不想为每个包装类。我也在考虑对原始json进行一些字符串操作,以返回添加包装属性,但我保留了对于B计划(甚至是C)的这种操作。 所以,我想知道是否有一种方法在gson中添加一个包装属性,就像我上面要求的一样。

谢谢。

回答

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()); 
+0

完美!谢谢! – 2013-03-06 01:57:13

1
JsonObject obj = new JsonObject();   
obj.add("foos", gson.toJsonTree(foos, Foo[].class));    
String json = obj.toString(); 
+0

对不起,我的意思是“toJsonTree”。我的错。 – 2013-03-06 02:01:19