通用列表的自定义反序列化器

时间:2017-11-09 16:12:26

标签: json generics serialization jackson deserialization

我正在尝试为通用列表创建自定义反序列化器。假设我得到了B类的json表示:

public class B{
    List<A> listObject;
}

其中A是我在运行时才看到的其他类。我想创建一个反序列化器,它能够将listObject的类型推断为内部类型为A的列表,并将其反序列化,而不是使用默认的hashmap反序列化器。

我尝试使用上下文反序列化器,类似于建议here 然后将其添加为List

的自定义反序列化器
addDeserializer(List.class, new CustomListDeserializer())

但是我不确定我应该如何读取json并在反序列化函数中创建列表(在上面的Wrapper示例中,它非常简单,您读取值并将其设置为值字段,但如果我的' wrapper'是List,如何读取值并添加它们?)

我尝试使用带有constructCollectionType(List.class, valueType)构造的CollectionType的readValue,但后来进入无限循环,因为readValue使用从中调用它的反序列化器。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

感谢您的建议。我通过将json解析为内部泛型类型的数组然后转换为list来解决它,如下所示:

Class<?> classOfArray = Array.newInstance(valueType.getRawClass(), 0).getClass(); Object[] parsedArray = (Object[]) parser.getCodec().readValue(parser, classOfArray); return Arrays.asList(parsedArray);