我看过一个Jackson反序列化@JsonTypeInfo的例子,就是:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")})
public class Animal {...}
我试过了,它工作得很好。现在,问题是在示例中,类Cat和Dog引用自Animal,这是我想避免的。有没有一种方法可以将类型绑定从Animal类中移走,并且仍然可以进行反序列化工作?谢谢
2条答案
按热度按时间qojgxg4l1#
我在这里找到了答案:http://jira.codehaus.org/browse/JACKSON-654。所以我可以用途:
rpppsulh2#
完全删除
@JsonSubTypes
也值得一试。这并不总是必要的,参见https://stackoverflow.com/a/57686619/5298002“你只需要在Animal类的声明前一行,就可以正确地进行多态序列化/反序列化:
这一行的意思是:在序列化时添加一个元属性,或在反序列化时读取一个名为“@class”(property =“@class”)的元属性(include = JsonTypeInfo.As.PROPERTY),该属性保存完全限定的Java类名(use = JsonTypeInfo.Id.CLASS)。
所以,如果你直接创建一个JSON(没有序列化),记得添加一个元属性“@class”和所需的类名,以便正确的反序列化。
更多信息在这里“- @marco