5

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

4

1 回答 1

6

serializeWithType()如果类型的实例需要支持多态类型处理(直接,当 type has @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 对象具有命名属性)。

于 2013-11-15T23:04:18.527 回答