Json多态性反序列化没有类型信息

时间:2015-04-23 13:53:32

标签: java json

我想也许我误解了一些杰克逊图书馆是如何工作的。 我正在尝试将JSON反序列化为对象,而不包含我要反序列化的对象的类型信息。

例如,我有以下所示联系信息的Correspondence亲子关系:

@JsonRootName("correspondence")
public class Correspondence {
    private Contact contact;
    // getter/setter not shown for brevity
}

@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "concreteType")
@JsonSubTypes({@JsonSubTypes.Type(value = Person.class, name = "person")})
public interface Contact {
    // just a wrapper interface
}

@JsonRootName("person")
public class Person implements Contact {
    private String firstName;
    private String lastName;
    // getter/setter not shown for brevity
}

当我拥有包含属性JsonTypeInfo时,发送以下JSON允许我使用JsonSubTypesPROPERTY反序列化此对象。 JSON将是:

{
    "correspondence": {
        "contact": {
            "type": "person",
            "firstName": "Johnny",
            "lastName": "Bravo"
        }
    }
}

以上格式,但我想在JSON中发送的格式为:

{
    "correspondence": {
        "person": {
            "firstName": "Johnny",
            "lastName": "Bravo"
        }
    }
}

如您所见,ContactPerson的子类现在是内部对象的根名称。我认为这可以使用包含属性WRAPPER_OBJECT来完成,但对于我的生活,我似乎无法让它工作。我已经阅读了多个资源,这些资源都有详细记录,这就是为什么我认为我可能会误解如何使用Jackson库来实现我的目标。

参考文献: Jackson Polymorphic Deserialization Polymorphic JSON serialization tutorial

0 个答案:

没有答案