我有这样的类层次结构:
public class Zoo {
public Animal animal;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "dog"),
@JsonSubTypes.Type(value = Cat.class, name = "cat")
})
public static class Animal {
public String name;
}
@JsonTypeName("dog")
public static class Dog extends Animal {
public double barkVolume;
}
@JsonTypeName("cat")
public static class Cat extends Animal {
boolean likesCream;
public int lives;
}
}
例如,如果要序列化dog
,则会得到以下json:
{
"animal": {
"type": "dog",
"name": "lacy",
"barkVolume": 0
}
}
(如您所见,它包含其他字段type
)
反之亦然(如果要将json反序列化为对象,我必须提供其他字段type
)
我不想有这个额外的字段。我想序列化/反序列化取决于设置的字段。例如,如果json包含字段barkVolume
,则显然是Dog
,如果json包含likesCream
lives
-它是Cat。
如果未提供该字段,我准备获取异常。
有没有比编写自定义序列化器/解串器更简单的方法?