【问题标题】:Custom deserializer for generic list通用列表的自定义反序列化器
【发布时间】:2017-11-09 16:12:26
【问题描述】:

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

public class B{
    List<A> listObject;
}

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

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

addDeserializer(List.class, new CustomListDeserializer())

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

我尝试将 readValue 与由 constructCollectionType(List.class, valueType) 构造的 CollectionType 一起使用,但随后我进入了无限循环,因为 readValue 使用了调用它的反序列化器。

有什么想法吗?

【问题讨论】:

标签: json generics serialization jackson deserialization


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多