2013-06-03 60 views
3

我有這樣自定義JSON序列調整

class MData 
{ 
    String version; 
    String ttl; 
    Foo[] foos; 
} 

一類其中foo是Foo {String key; String value}

,並採用序列GSON MDATA的一個實例創建JSON這樣

{ 
    "version" : "1.0", 
    "ttl" : 4, 
    "foos" : [ {"key" : "fooKey1", "value" : "fooValue1" } , {"key" : "fooKey2", "value" : "fooValue2" }] 
} 

,但我想知道是否有一種方法來操縱像這樣的json世代

{ 
    "version" : "1.0", 
    "ttl" : 4, 
    "fooKey1" : "fooValue1", 
    "fooKey2" : "fooValue2" 
} 

而不必重寫原始類或引入中間類型。

我有很多有鍵/值屬性現有實體和要求是有一個平坦的JSON,我期待分成的方式來調整產生這樣我就可以得到所需的輸出。

回答

3

我認爲你正在尋找Custom Serializers and Deserializers。我真的不會推薦你正在做的那種自定義序列化。因爲它正在改變數據的語義。自定義序列化器通常用於在不改變其語義的情況下過濾或轉換某些數據。

話雖這麼說,你可以做這樣的事情:

public class MDataSerializer implements JsonSerializer<MData> { 

    @Override 
    public JsonElement serialize(MData src, Type typeOfSrc, JsonSerializationContext context) { 

     JsonObject obj = new JsonObject(); 
     obj.addProperty("version", src.version); 
     obj.addProperty("ttl", src.ttl); 

     for(Foo foo : src.foos) { 
      obj.addProperty(foo.getKey(), foo.getValue()); 
     } 

     return obj; 
    } 
}