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

使用Jackson序列化泛型类型

曹高轩
2023-03-14

我用Jackson编写了自己的序列化程序。它接受一个变量或类,并返回任何简单类型的值。

示例:serialize(new MyClass(2.0))将返回一个值为 2.0 的双精度值,其中 MyClass 如下所示:

public class MyClass {
  private double number;

  public MyClass(double number) {
    this.number = number;
  }

  @JsonValue
  public double getNumber() {
    return number;
  }
}

因此,为了获得正确的值,我需要设置@JsonValue,但是,当我序列化一个没有@JsonValue注释的对象(例如UUID)时,它会返回预期的UUID字符串。

创建我自己的类没有@JsonValue注释不会产生相同的效果。在本例中,serialize(new MayClass(2.0)) 返回映射 {“number”:2.0},其中 MyClass 如下所示:

public class MyClass implements Serializable, Comparable<MyClass> {
  private double number;

  public MyClass(double number) {
    this.number = number;
  }

  public double getNumber() {
    return number;
  }

  @Override
  public int compareTo(MyClass obj) { return 0; }
}

我的问题是,为什么UUID(和其他预定义的可序列化类)按预期进行序列化,而我自己的可序列化类却没有?此外,如何让我的可序列化类正确序列化?

共有1个答案

高才
2023-03-14

Jackson具有预定义的UUID、URI、日期等序列化器和反序列化器,因此不需要注释。

如果要在不带批注的情况下序列化类,则需要编写自定义序列化程序和反序列化程序。例如 MyClassSerializer.

 类似资料:
  • 问题内容: 我有一个json字符串,应该将其反序列化为以下类 我该怎么做?这是通常的方式 但是我怎么提到T代表什么呢? 问题答案: 你需要为使用的每种通用类型创建一个对象,并将其用于反序列化。例如

  • 我有一个json字符串,我应该将其反序列化为以下类 我怎么做?这是通常的方式 但我怎么说T代表什么呢?

  • 问题内容: 我正在尝试制作一个使用Jackson来反序列化POJO的类。 看起来像这样… 我对此实施有2个问题。 首先是我将类类型传递给方法,以便对象映射器知道应反序列化的类型。有使用泛型的更好方法吗? 同样在get方法中,我将一个从objectMapper返回的对象强制转换为T。这看起来特别讨厌,因为我必须在此处强制转换T,然后还必须从调用它的方法中强制转换对象类型。 我在该项目中使用了Robo

  • 我有一个带有几个实现类的通用接口,需要通过Json序列化和反序列化这些类。我正试图开始与Jackson合作,使用完整的数据绑定,没有太多运气。 示例代码说明了这个问题: 调用会导致以下异常: 组织。科德豪斯。杰克逊。地图JsonMappingException:未找到类测试$Success的序列化程序,也未找到创建BeanSerializer的属性(为了避免异常,请禁用SerializationC

  • 我需要将包含类型为Pair的对象的列表序列化为xml 首先,我创建了一个类PairList来保存对的列表,然后我创建了一个实际的类,它表示一对两个值,key和value。 然后,我尝试序列化它: 不幸的是,我遇到了一个异常:。欢迎任何关于如何避免此异常并序列化该类的想法。 如果我选择不序列化ttype和utype字段(通过将其设置为受保护或私有),则序列化有效。我不明白为什么它不想序列化类型字段。