Jackson- JsonSerializable-什么时候应该实现serializeWithType方法

时间:2013-11-13 06:55:09

标签: json serialization jackson

我正在使用JsonSerializable接口来自定义我的JSON输出。我可以通过重写“serialize”方法来自定义JSON序列化。但是我想知道需要实现“serializeWithType”方法的场景。我无法找到使用此方法的任何示例。有人可以通过一个例子帮助我理解这种方法的必要性吗?提前谢谢。

1 个答案:

答案 0 :(得分:4)

如果类型的实例需要支持多态类型处理(直接,类型为serializeWithType();或者启用“默认类型”),则需要

@JsonTypeInfo

典型的实现取决于您输出的JSON结构类型;如果将值序列化为简单标量(如JSON String),则使用类似:

的内容
// 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对象具有命名属性)。