首页 > 解决方案 > 具有类注释的类型的序列化/反序列化的自定义增强

问题描述

我想要一堆这样的类:

@Special("SpecialThing")
data class MyThing(
    val myVal: String
)

这个特定实例的序列化格式是:

{
  "special": "SpecialThing",
  "params": {
    "myVal": "myValValue"
  }
}

我希望能够对这些类型的注释类型进行序列化。

我希望做的一些事情:

  1. 将 Jackson 注释从这些类本身中排除(也许使用mixins?)。我想让 Jackson 特定的序列化与这些类型分开。
  2. 避免将其"SpecialThing"作为字段/属性
  3. 通过使用"special"值反序列化为正确的类型

我可能无法同时完成所有这些,但我很难找到合适的杰克逊作品来实现我的目标。有一些内置功能接近我想要的(比如JsonUnwrapped

我也许可以@JsonTypeInfo以某种方式使用多态继承,但我希望有一种更清洁、更直接的方法。

如何处理需要“包装”的这些类型的序列化/反序列化?

标签: jsonjackson

解决方案


你不能完全做到这一点,因为你有一个杰克逊不关心的你自己的花哨的注释,但你可以用@JsonWrapped和 mixin 来做其他的事情。

您将需要编写一个自定义 JSON 序列化器来处理您的注释,这非常容易。


推荐阅读