【问题标题】:Yasson not converting subclasses properlyYasson 没有正确转换子类
【发布时间】:2020-05-11 10:27:36
【问题描述】:

我正在为 payara-micro 构建一个应用程序。我需要将 Json 字符串转换为扩展超类的对象。我遇到的问题是父字段和子字段都没有填充,并且创建的实例不是子类类型:

例如Person 有一个 Vehicle 列表(子类型:BikeBus、...)

  {
      name: "John",
      vehicles: [
          {
              type: "bike",
              doors: 5
          }
      ]
  }

此 json 的结果对象将是一个 Person 对象,其中填充了 name,以及一个带有一个元素但该元素的类型为 Vehicle 且在 Vehicle 中没有字段的 Vehicle 列表会有一个值。

Jsonb jsonb = JsonbBuilder.create();
Person person = jsonb.fromJson(jsonString, Person.class);

【问题讨论】:

    标签: java json jsonb payara-micro yasson


    【解决方案1】:

    很遗憾,您正在寻找的功能不是 Yasson(也不是 JSON-B)的一部分。规范没有明确提及这一点,但User Guide on Serializers/Deserializers 暗示了这一点(强调我的):

    让我们看一下示例。想象一下,我们想要序列化和反序列化一个宠物载体列表。由抽象类 Animal 定义的携带宠物。它可以是它的任何子类。我们想正确地序列化和反序列化它。 为了做到这一点,我们需要在 JSON 文档中保存类型信息并在反序列化时使用它。可以使用自定义序列化器/反序列化器对来完成。

    该示例包含一个自定义序列化器/反序列化器,它应该会为您提供所需的结果,但您必须自己实现此自定义序列化器/反序列化器。

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2016-05-20
      • 2018-06-07
      • 2014-06-17
      • 1970-01-01
      相关资源
      最近更新 更多