Java gson在序列化时替换成员对象

时间:2017-04-23 21:40:36

标签: java gson android

我正在尝试为输出JSON文件设计一个更平的结构。我如何做到这一点,当我使用gson.toJson()时,成员对象将使用对象的ID序列化而不是序列化整个事物?

例如:

class Foo {
    public int id;
}

class Bar {
    public Foo foo = new Foo();
    public String data = "something";
}

我希望gson.toJson(bar)输出如下内容:{"foo": 1029, "data":"something"}

1 个答案:

答案 0 :(得分:1)

也许是这样的:

public class FooBarAdapter implements JsonSerializer<Bar> {

   @Override
   public JsonElement serialize(Bar bar, Type typeOfObj,
        JsonSerializationContext context)
   {

       JsonObject obj = new JsonObject();
       obj.addProperty("foo", bar.foo.id);
       obj.addProperty("data", bar.data);

       return obj;
   }

}

然后当你想序列化它时:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Bar.class, new FooBarAdapter());
return gsonBuilder.create().toJson(bar);