我使用Gson在我的应用程序中生成调试输出
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
gson.toJson(myObject);但是,当尝试序列化数据结构时,Gson确实会抱怨循环引用错误。这能用杰克逊图书馆做吗?
UPD Gson 2.3.1: 2014年11月20日发布
Added support to serialize objects with self-referential fields. The self-referential field is set to null in JSON. Previous version of Gson threw a StackOverflowException on encountering any self-referential fields.
The most visible impact of this is that Gson can now serialize Throwable (Exception and Error)发布于 2012-03-19 10:10:11
若要与Jackson序列化:
public String serialize(Object obj, boolean pretty) {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
if (pretty) {
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
}
return mapper.writeValueAsString(obj);
}发布于 2012-03-19 10:14:55
Jackson可以使用以下方法处理对象图中的循环:
@JsonIgnore,,其中省略了扩展JsonSerializer的属性entirely
@JsonManagedReference和@JsonBackReference
如果您仍然希望提供有关对象的一些信息,但希望省略某些字段(导致循环的字段),则可以使用JsonSerializer。例如:
import org.codehaus.jackson.map.JsonSerializer
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.SerializerProvider;
import java.io.IOException;
public class ParentReferenceSerializer extends JsonSerializer<Parent> {
@Override
public void serialize(Parent parent, JsonGenerator jgen,
SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
writeNumberField(jgen, "id", parent.getId());
// ... other fields ...
jgen.writeEndObject();
}
}然后,在被序列化的类中,您将使用一个@JsonSerialize注释:
@JsonSerialize(using = ParentReferenceSerializer.class)
public Parent getParent() {
return parent;
}https://stackoverflow.com/questions/9767131
复制相似问题