通常,在使用Jackson进行多态反序列化时,我有一个映射到类的字符串字段,可以这样做。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "methodName")
@JsonSubTypes({
@JsonSubTypes.Type(value = MyFirstClass.class, name = "firstClassName"),
@JsonSubTypes.Type(value = MySecondClass.class, name = "secondClassName")})
如果值是整数而不是字符串,我找不到任何简单的示例。 例如,我如何选择要反序列化的类而不是“methodName”:“firstClassName”我的JSON包含“methodName”:1?
答案 0 :(得分:1)
没有'简单'的方法。您必须编写自己的序列化机制实现,以及一个用于反序列化的实现。这种实现的危险很多,你最好只引用你的typeinfo属性并将其用作String。
答案 1 :(得分:0)
如果只关心反序列化,可以将name
的{{1}}元素的值设置为整数的字符串表示形式。这将从JSON中的数字值正确反序列化。但是,在序列化时,它将序列化为该值的字符串表示形式,而不是数字(例如@JsonSubTypes.Type
而不是"1"
)。
1
或者,如果您愿意为该值添加一个复制@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "methodName")
@JsonSubTypes({
@JsonSubTypes.Type(value = MyFirstClass.class, name = "1"),
@JsonSubTypes.Type(value = MySecondClass.class, name = "2")})
中的值声明的方法,则可以使其序列化和反序列化为数字,而不是带有更多样板代码的字符串。 / p>
@JsonSubTypes.Type