【发布时间】:2019-12-31 06:30:55
【问题描述】:
@Data
public class Parent {
private String type;
private List<ChildBase> children;
}
public abstract class ChildBase {
public void someMethod(){};
}
@Data
public class ChildA extends ChildBase {
private String bar;
}
@Data
public class ChildB extends ChildBase {
private String foo;
}
那么,原来的JSON字符串是:
{
"type": "childA",
"children": [
{
"bar": "baaaar"
}
]
}
如何反序列化这个JSON字符串,反序列化的对象(Parent的实例),它的children字段的实际类型应该是ChildA,因为指定了type字段;
在问题use-property-of-parent-object-to-determine-subclass-when-deserializing 中,答案一击显示了确定子类的方法,因为它不适用于列表字段。
【问题讨论】:
-
在您提供的链接中,他使用
@JsonTypeInfo(use=Id.NAME, property="kind") @JsonSubTypes({ @Type(value=ExampleNodeT3.class, name="t3"), @Type(value=ExampleNodeT4.class, name="t4")})的注释创建了自定义反序列化,您在代码中已经这样做了吗?