如何在没有其他标记字段的情况下序列化继承层次结构(仅基于字段集)?

时间:2018-11-28 13:36:08

标签: java json inheritance serialization jackson

我有这样的类层次结构:

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。

如果未提供该字段,我准备获取异常。

有没有比编写自定义序列化器/解串器更简单的方法?

0 个答案:

没有答案