我有一个需要序列化的对象,但我遇到了一些问题。我需要一个自定义序列化程序来序列化无效对象与有效对象。因此,我编写了一个自定义序列化程序,如下所示:
public class MySerializer extends JsonSerializer<MyObject> {
@Override
public void serialize(MyObject obj, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
if(obj.isValid()){
jgen.writeObject(obj.getInvalids());
}
else{
jgen.writeObject(obj);
}
jgen.writeEndObject();
}
}
现在,当我尝试序列化时,如果无限递归,我会收到错误(原因很清楚)。所以我想知道我是否可以这样做,而不必将我的代码改为:
public class MySerializer extends JsonSerializer<MyObject> {
@Override
public void serialize(MyObject obj, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
if(obj.isValid()){
jgen.writeObject(obj.getInvalids());
}
else{
jgen.writeObjectField("prop1", obj.getProp1());
jgen.writeObjectField("prop2", obj.getProp2());
...
}
jgen.writeEndObject();
}
}
有没有更清洁的方式(而且不那么讨厌)的方式来做我想做的事情?我见过this answer to a similar question, but it is quite terse and I was unable to divine a clear solution from it.
答案 0 :(得分:0)
访问&#34;默认&#34;的方式序列化程序(如果你没有提供自定义程序,杰克逊会建立一个程序)是通过注册BeanSerializerModifier
(使用SimpleModule
注册它),然后覆盖modifySerializer()
。它被赋予默认的序列化程序,然后您可以构建自己的序列化程序,然后可以根据需要进行委托。