将自定义JSONdeserializer与派生类一起使用

时间:2014-07-02 15:02:35

标签: android json gson

我想创建一些抽象,所以我会减少重复代码的数量。

简单的例子(我的真实对象要复杂得多 - 这就是我手动解析它的原因,但B和C都用A共享大量数据):

public abstract class A {
   int x;
   int y;
}

public class B extends A {
   int z;
}

public class C extends A {
   int w;
}

我编写了两个自定义反序列化器,它们都来自一些抽象的反序列化器,它将负责填充基类的xy字段,然后根据某个类填充字段。

gsonBuilder.registerTypeAdapter(B.class, new BsonDeserializer());
gsonBuilder.registerTypeAdapter(C.class, new CJsonDeserializer());

我的问题是Gson在注册时只考虑超类,所以它不会为两个不同的类使用两个不同的反序列化器,只有第一个。

我意识到有RuntimeTypeAdapter类可用,但是AFAIK,它会强迫我修改服务器上的json - 让我们说每个JSON都包含字段" type&#34 ; (我不能真的这样做 - 我不允许)(?)

这种问题有什么好办法吗?

0 个答案:

没有答案