首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象转储为字符串与Jackson

将对象转储为字符串与Jackson
EN

Stack Overflow用户
提问于 2012-03-19 08:43:04
回答 2查看 43.1K关注 0票数 31

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

代码语言:javascript
复制
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
gson.toJson(myObject);

但是,当尝试序列化数据结构时,Gson确实会抱怨循环引用错误。这能用杰克逊图书馆做吗?

UPD Gson 2.3.1: 2014年11月20日发布

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-19 10:10:11

若要与Jackson序列化:

代码语言:javascript
复制
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);
}
票数 39
EN

Stack Overflow用户

发布于 2012-03-19 10:14:55

Jackson可以使用以下方法处理对象图中的循环:

  1. @JsonIgnore,,其中省略了扩展JsonSerializer

的属性entirely

  • @JsonManagedReference@JsonBackReference

  • a自定义序列化程序。

如果您仍然希望提供有关对象的一些信息,但希望省略某些字段(导致循环的字段),则可以使用JsonSerializer。例如:

代码语言:javascript
复制
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注释:

代码语言:javascript
复制
@JsonSerialize(using = ParentReferenceSerializer.class)
public Parent getParent() {
    return parent;
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9767131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档