3

我有这样的课

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,我正在寻找一种调整生成的方法,以便获得所需的输出。

4

1 回答 1

3

我认为您正在寻找Custom Serializers 和 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;
    }
}
于 2013-06-03T17:23:42.243 回答