我有一个包含很多子类的抽象类。我想通过实现Jackson的JsonSerializable接口向父级和大多数子系统添加自定义序列化功能。在sub中扩展父级序列化的最佳方法是什么?要编写一个合适的Json对象,我需要在调用JsonGenerator.writeStartObject()+ writeEndObject()之间放置序列化代码。所以只是重写JsonSerializable.serialize就像这样做:
class Parent implements JsonSerializable {
String parentField;
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField("parentField", parentField);
gen.writeEndObject(); // Closing Object..
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {}
}
class Sub extends Parent {
String subField;
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
super.serialize(gen, serializers);
//-> Json-object already closed, subField ends up outside..
gen.writeStringField("subField", subField);
}
}
答案 0 :(得分:0)
您可以通过将工作委托给其他方法来使用经典继承和多态:
public class Parent implements JsonSerializable {
String parentField;
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
startSerialize(gen);
doSerialize(gen, serializers);
endSerialize(gen);
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
}
protected void startSerialize(JsonGenerator gen) throws IOException {
gen.writeStartObject();
}
protected void doSerialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStringField("parentField", parentField);
}
protected void endSerialize(JsonGenerator gen) throws IOException {
gen.writeEndObject(); // Closing Object..
}
}
public class Sub extends Parent {
String subField;
@Override
protected void doSerialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStringField("subField", subField);
}
}
}