2013-03-06 109 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