【发布时间】:2018-03-09 12:29:15
【问题描述】:
我有一个类动物和一个扩展它的类猫:
class Animal {
protected String name;
...
}
class Cat extends Animal {
protected int livesLeft;
...
}
每个都有一个单独的JsonSerializer:
module.addSerializer(Cat.class, new CatSerializer());
module.addSerializer(Animal.class, new AnimalSerializer());
现在我想序列化这个类的一个实例:
class Foo {
Cat catA = new Cat("Felix", 9);
Animal catB = new Cat("Madonna", 3);
}
但是当我这样做时,两个字段都使用CatSerializer,所以我得到了
{"catA" : {"name":"Felix", "livesLeft":9},
"catB" : {"name":"Madonna", "livesLeft":3}}
这是我无法反序列化的,因为 AnimalDeserializer 需要知道动物的类型才能构造它。
理想情况下,它会为 Animal catB 字段使用 AnimalSerializer,我会得到:
{"catA" : {"name":"Felix", "livesLeft":9},
"catB" : {"animalType":"Cat", "name":"Madonna", "livesLeft":3}}
可以反序列化。
解决思路:有没有办法在序列化过程中确定字段类型(不仅仅是实例类型)?所以对于字段Animal catB = new Cat("Madonna", 3),它将返回Animal,而不是Cat。
【问题讨论】: