我想创建一些抽象,所以我会减少重复代码的数量。
简单的例子(我的真实对象要复杂得多 - 这就是我手动解析它的原因,但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;
}
我编写了两个自定义反序列化器,它们都来自一些抽象的反序列化器,它将负责填充基类的x
和y
字段,然后根据某个类填充字段。
gsonBuilder.registerTypeAdapter(B.class, new BsonDeserializer());
gsonBuilder.registerTypeAdapter(C.class, new CJsonDeserializer());
我的问题是Gson在注册时只考虑超类,所以它不会为两个不同的类使用两个不同的反序列化器,只有第一个。
我意识到有RuntimeTypeAdapter类可用,但是AFAIK,它会强迫我修改服务器上的json - 让我们说每个JSON都包含字段" type&#34 ; (我不能真的这样做 - 我不允许)(?)
这种问题有什么好办法吗?