当前位置: 首页 > 知识库问答 >
问题:

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

公冶光亮
2023-03-14

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

public class B{
    List<A> listObject;
}

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

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

addDeserializer(List.class, new CustomListDeserializer())

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

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

有什么想法吗?

共有1个答案

易自珍
2023-03-14

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

<代码>类

 类似资料:
  • 我有下面的JSON,我正试图使用Jackson API反序列化它 我基本上需要一个附件类,它有一个AttachmentFile对象列表,如下所示: 如何使用自定义反序列化器实现这一点? 谢谢

  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器

  • 问题内容: 我有一堂课 我想将下面的JSON数据反序列化到上面的类/对象中 我的想法是在JSON中是一个对象,但我只想获取(在JSON中)在反序列化期间将像在类中那样传递。 如何使用Json.NET实现该目标? 我相信我可以使用CustomJsonConverter完成它。但是我很困惑。docs中的示例仅用于,但不适用。 问题答案: 我只是使用上面在问题中提到的方法解决了我的问题。在我完整的代码下

  • 问题内容: 假设我有一个具有列表属性的对象: 我想通过注释为列表定义一个通用的自定义反序列化器: 我正在寻找一种创建“通用”反序列化器的方法- 一种能够对两种类型的列表进行反序列化的方法,类似于ContextualDeserializer,用于使用Jackson将JSON映射到不同类型的地图。 最终目的是实现自定义反序列化逻辑,以将空字符串反序列化为空列表,但是我想了解一种通用方法,而不仅仅是空字

  • 我想通过扩展默认的反序列化器来创建自己的反序列化器,在其后面设置更多的值: 如您所见,我还想将此DTO母类重用于其他DTO。 我没有找到任何这样的例子。我真的是世界上第一个 反序列化的“AsUsual”(p,ctxt)应该是什么 我应该使用什么motherclass?JsonDeserializer/StdDeserializer/UntypedObjectDeserializer 反序列化程序会