使用Jackson将对象转储为String

我正在使用Gson在我的应用程序中生成调试输出

Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create(); gson.toJson(myObject); 

但在尝试序列化数据结构时,Gson确实抱怨循环引用错误。 这可以用jackson图书馆完成吗?

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) 

要与Jackson序列化:

 public String serialize(Object obj, boolean pretty) { ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false); if (pretty) { return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); } return mapper.writeValueAsString(obj); } 

jackson可以处理对象图中的循环:

  1. @JsonIgnore ,你完全省略了这个属性
  2. @JsonManagedReference@JsonBackReference
  3. 一个自定义的Serializer,它扩展了JsonSerializer

当您仍希望提供有关该对象的某些信息但希望省略某些字段(导致该循环的字段)时,您将使用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 { @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; }