0
Jackson的文档说,实现其接口的类将通过调用接口的serialize()方法进行序列化。如何让杰克逊使用其JsonSerializable接口?
我在泽西岛2.25下使用Jackson 2.8.4的项目中试过这个。
它继续使用Jackson的BeanSerializer来执行基于公共getter的默认序列化,而不是使用SerializableSerializer和serialize()方法。
代码看起来像这样相当小的例子...
public class Minimal extends JsonSerializable.Base {
private String title;
private ZonedDateTime theTime;
public String getTitle() { return title; }
void setTitle(String title) { this.title = title; }
public ZonedDateTime getTheTime() { return theTime; }
void setTheTime(ZonedDateTime theTime) { this.theTime = theTime; }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeFieldName("title");
gen.writeString(this.title);
// Other serialization...
gen.writeEndObject();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
throw new UnsupportedOperationException("Not supported.");
}
}
我也尝试过其他的想法使用正确的串行得到它...也许愚蠢的想法一样......
public class Minimal implements JsonSerializable {
和
@JsonSerialize(using = SerializableSerializer.class)
public class Minimal extends JsonSerializable.Base {
和
@JsonSerialize(as = JsonSerializable.Base.class)
public class Minimal extends JsonSerializable.Base {
我错过了什么让杰克逊功能工作?
我在杰克逊的最新源代码中验证了该功能仍然存在。我想我可以通过调试器中的2.8.4源代码追踪它,但也许有人知道答案。