自定义json序列化调整

时间:2013-06-03 17:21:27

标签: java json gson

我有一个这样的课程

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" 
}

无需重写原始类或引入中间类型。

我有很多现有的实体都有key / value属性,并且要求有一个扁平的json,我正在研究调整代的方法,这样我就可以获得所需的输出。

1 个答案:

答案 0 :(得分: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;
    }
}