我正在尝试为通用列表创建自定义反序列化器。假设我得到了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使用从中调用它的反序列化器。
有什么想法吗?
答案 0 :(得分:0)
感谢您的建议。我通过将json解析为内部泛型类型的数组然后转换为list来解决它,如下所示:
Class<?> classOfArray = Array.newInstance(valueType.getRawClass(), 0).getClass();
Object[] parsedArray = (Object[]) parser.getCodec().readValue(parser, classOfArray);
return Arrays.asList(parsedArray);