0

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

例如Person有一个列表Vehicle(子类型:,,,Bike... Bus

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

此 json 的结果对象将是一个已填充的Person对象,以及一个包含一个元素的列表,但该元素的类型将是,并且其中的任何字段都不会有值。nameVehicleVehicleVehicle

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

1 回答 1

0

不幸的是,您正在寻找的功能不是 Yasson(也不是 JSON-B)的一部分。规范没有明确提到这一点,但序列化器/反序列化器的用户指南暗示了这一点(强调我的):

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

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

于 2020-05-23T11:16:27.037 回答