Jackson中的多态反序列化基于整数而不是字符串

时间:2013-07-31 18:47:56

标签: java jackson

通常,在使用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?

2 个答案:

答案 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