【问题标题】:polymorphic deserialization of JSON with jackson, property type becomes "null"使用jackson对JSON进行多态反序列化,属性类型变为“null”
【发布时间】:2015-03-11 10:14:46
【问题描述】:

我正在使用 Jackson 将一个大的 Json 字符串转换为各种类和子类。

我有一个对象列表,每个对象都包含一个节点对象、一个最后一个结果对象和一个子数组。 children 数组包含具有完全相同设置的对象列表。这持续了 3 或 4 层。

每一层的节点都属于不同的子类,它们都是从节点超类扩展而来的。 我用以下注释对超类节点进行了注释:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = Type1ResponseDto.class, name = "Type1"),
    @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"),
    @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"),
    @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4"),
    @JsonSubTypes.Type(value = Type5ResponseDto.class, name = "Type5")
})

这似乎可行,因为所有子类都已映射。

但是,这会导致“type”属性设置为 null。

关于为什么会发生这种情况的任何想法?

【问题讨论】:

    标签: java android jackson


    【解决方案1】:

    我需要添加visible=true 才能显示类型属性:

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type",visible = true)
    @JsonSubTypes({
        @JsonSubTypes.Type(value = Type1ResponseDto.class,name =  "Type1"),
        @JsonSubTypes.Type(value = Type2ResponseDto.class, name = "Type2"),
        @JsonSubTypes.Type(value = Type3ResponseDto.class, name = "Type3"),
        @JsonSubTypes.Type(value = Type4ResponseDto.class, name = "Type4")
    })
    

    【讨论】:

    • 此答案适用于 Jackson 的哪个版本?我使用的是 1.9.9,但没有这些选项,我遇到了这个确切的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多