【问题标题】:Jackson- JsonSerializable- when should we implement serializeWithType methodJackson- JsonSerializable- 我们什么时候应该实现 serializeWithType 方法
【发布时间】:2013-11-13 06:55:09
【问题描述】:

我正在使用 JsonSerializable 接口来自定义我的 JSON 输出。我可以通过覆盖“序列化”方法来自定义 JSON 序列化。但我想知道也需要实现“serializeWithType”方法的场景。我找不到任何使用此方法的示例。有人可以通过示例帮助我了解此方法的需要吗?提前致谢。

【问题讨论】:

    标签: json serialization jackson


    【解决方案1】:

    如果类型的实例需要支持多态类型处理,则需要serializeWithType()(直接,当类型具有@JsonTypeInfo;或启用“默认类型”时)。

    典型的实现取决于你输出什么样的 JSON 结构;如果值被序列化为简单的标量(如 JSON 字符串),你会使用类似的东西:

    // V here is whatever type 'this' is
    @Override
    public void serializeWithType(JsonGenerator jgen, SerializerProvider provider,
            TypeSerializer typeSer)
        throws IOException, JsonGenerationException
    {
        typeSer.writeTypePrefixForScalar(this, jgen, V.class);
        serialize(value, jgen, provider);
        typeSer.writeTypeSuffixForScalar(this, jgen);
    }
    

    而之所以需要这样的方法,仅仅是因为TypeSerializer不知道自己会有什么样的JSON表示值;并且因为该表示决定了如何包含Type Id(例如,只有 JSON 对象具有命名属性)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2014-01-25
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多