Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jackson-使用多态类型列表反序列化对象_Java_Json_Jackson - Fatal编程技术网

Java jackson-使用多态类型列表反序列化对象

Java jackson-使用多态类型列表反序列化对象,java,json,jackson,Java,Json,Jackson,我认为最好用一个例子来解释 我想反序列化一个JSON对象,它包含一个接口类型列表以及列表中的类型,但我不确定如何让反序列化器确定列表中的具体类型: 键入要反序列化的内容 public class MyClass { private MyEnum type; // A or B private List<Parent> objects; } public interface Parent 儿童 public ChildA implements Parent publ

我认为最好用一个例子来解释

我想反序列化一个JSON对象,它包含一个接口类型列表以及列表中的类型,但我不确定如何让反序列化器确定列表中的具体类型:

键入要反序列化的内容

public class MyClass {
    private MyEnum type; // A or B
    private List<Parent> objects;
}
public interface Parent
儿童

public ChildA implements Parent
public ChildB implements Parent

我知道如果类型不是
列表
,我可以将类型与
JsonSubTypes
一起使用,例如:

@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "type", visible = true)
@JsonSubTypes({
        @JsonSubTypes.Type(value = ChildA.class, name = "A"),
        @JsonSubTypes.Type(value = ChildB.class, name = "B")
})

如果
type
在父类型内,则情况也是如此。但是,当类型在父类
之外时,是否有方法帮助反序列化程序确定列表中的类型?(列表将只包含一个子类型)

Jackson在使用
JsonTypeInfo
的集合上努力进行类型擦除(这是一个Jackson Scala)。但是,数组是强类型的,所以如果可能的话,您可以切换到使用数组。这似乎是最简单的方法


或者,编写能够实例化正确类的smart可以与注释一起使用。在内部,反序列化程序仍然可以使用Jackson的
readValue
方法。因此,它实际上只是负责选择正确的类型。这给出了从自定义反序列化程序恢复到标准反序列化程序的示例。

我似乎无法解决的唯一问题是将反序列化程序与
内容一起使用
用法是
类型
标志在
父类
之外。