我有一个这样的课程
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,我正在研究调整代的方法,这样我就可以获得所需的输出。
答案 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;
}
}