【问题标题】:Custom augmentation of serialization/deserialization of types that have class annotation具有类注释的类型的序列化/反序列化的自定义增强
【发布时间】:2018-04-27 20:32:17
【问题描述】:

我想要一堆这样的类:

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

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

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

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

我希望做的一些事情:

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

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

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

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

【问题讨论】:

    标签: json jackson


    【解决方案1】:

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

    您需要write a custom JSON Serializer 来处理您的注释 这真的很容易。

    【讨论】:

    • 至少当我查看自定义序列化器/反序列化器时,当我希望它们使用我的注释进行序列化和数据反序列化时,它们中的大多数似乎都是基于类型的(某些注册可能是可反序列化类型所必需的)。我希望我可以编写一个序列化器和一个反序列化器来处理我的所有类型。
    • 您可以使用reflection 在类路径上查找所有带有您注释的类,并在启动时将它们全部注册,或者您可以注册Object 进行反序列化。然后,动态查看每个对象:如果它有您的注释,请应用您的逻辑。否则委托给原来的反序列化器
    猜你喜欢
    • 2018-07-05
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2014-10-27
    • 2020-07-19
    • 2022-09-23
    相关资源
    最近更新 更多