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