为具有自己的JSON序列化实现的类编写Gson TypeAdapter

时间:2014-11-17 18:24:53

标签: java json serialization gson

我正在尝试序列化一个类,其中一个成员带有自己的JSON序列化实现。我不确定如何将其与其他属性包含在一起。 例如

class Foo {
    String fieldA;
    String fieldB;
    Bar bar;
}

班级Bar有一个方法toJSONString()。目前,我通过将JsonSerializer注册为TypeAdapter来包含它:

class BarSerializer implements JsonSerializer<Bar> {
   @Override
   public JsonElement serialize(Bar bar, Type type, JsonSerializationContext ctxt) {
       return new JsonParser().parse(bar.toJSONString());
   }

}

我无法更改Bar的代码,或者我无法直接使用其字段对其进行序列化,因为它具有一些深层嵌套的结构,并且我对其成员类类型没有任何控制权。正如您在上面的方法中所看到的,Bar对象被再次序列化,解析和序列化。 在Bar中是否还有其他简单/有效的序列化Foo的方式?

1 个答案:

答案 0 :(得分:1)

如果您想要一种有效的方式,建议使用TypeAdapter

以下说明是从JsonSerializer的文档中复制的:

  

新应用程序应该更喜欢TypeAdapter,其流API是   比这个界面的树API更有效。

查看此link以获取有关TypeAdapter的一些好例子。