2013-06-03 89 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; 
    } 
}