首页 > 解决方案 > 反序列化继承列表的集合

问题描述

我正在尝试反序列化这样的接口:

public interface MyCollection<T> extends List<T> {...}

并且MyCollection有多种实现方式,比如public class MyBasicCollection<String>and public class MyOtherCollection<String>

我在界面上添加了注释,如下所示:

@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = MyBasicCollection.class, name = "basic"),
    @JsonSubTypes.Type(value = MyOtherCollection.class, name = "other")
})
public interface MyCollection<T> extends List<T> {...}

序列化和反序列化的详细代码如下:

MyCollection<String> testCollection = new MyBasicCollection<String>();
ObjectMapper mapper = new ObjectMapper();
String serializedString = mapper.writeValueAsString(testCollection);
MyCollection<String> reconstructed = mapper.readValue(serializedString, new TypeReference<MyCollection<String>>(){});

我会得到一个

找不到非具体集合类型的反序列化器

JsonMapping 异常。

但是,如果我将最后一行更改为

MyCollection<String> reconstructed = mapper.readValue(serializedString, new TypeReference<MyBasicCollection<String>>(){});

它完美地工作。

有没有办法使反序列化与多态类型一起工作?

标签: javajsonserializationjacksondeserialization

解决方案


推荐阅读