java - 使用 Jackson 序列化对象列表 : "deep" and/or "shallow"

标签 java json serialization jackson

当使用 Jackson 序列化对象列表时,我想控制对象是“深”还是“浅”序列化。

例如:测试有两个 X 类对象列表

public class Test {
    public List<X> list1;
    public List<X> list2;

    public Test() {
        X x1 = new X("1", "one");
        X x2 = new X("2", "two");

        list1 = new LinkedList<X>();
        list1.add(x1);
        list1.add(x2);
        list1.add(x1);

        list2 = new LinkedList<X>();
        list2.add(x1);
        list2.add(x2);
    }
}

public class X {
    public String id;
    public String name;

    public X(String id, String name) {
        this.id = id;
        this.name = name;
    }
}

如果按原样序列化,它将如下所示:

{
"list1":[{"id":"1","name":"one"},{"id":"2","name":"two"},{"id":"1","name":"one"}],
"list2":[{"id":"1","name":"one"},{"id":"2","name":"two"}]
}

但假设我想序列化它,以便 list1 是 X 的浅版本,list2 是 X 的深版本:

{
"list1":["1","2","1"],
"list2":[{"id":"1","name":"one"},{"id":"2","name":"two"}]
}

jackson 中是否有任何注释可以为我做到这一点?也许是自定义序列化?我能做些什么来让我接近这个吗?

提前致谢!

最佳答案

想通了(我想)。

public class Test {
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") @JsonIdentityReference(alwaysAsId=true)
    public List<X> list1;

    public List<X> list2;

关于java - 使用 Jackson 序列化对象列表 : "deep" and/or "shallow",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34815620/

相关文章:

java - ApplicationContext 始终为空

javascript - JSON数据存储

c# - 序列化方法的比较

java - 是否可以使可序列化类的锁暂时存在?

java - 如何在SWT中设置ScrolledComposite的最大高度

java - 如何终止发送长时间运行的 HTTP 请求的线程?

python - 在 bs4 中使用 .text 时未获取 json

asp.net - 防止VB.NET中的属性序列化

java - 为什么此代码有这么多错误?

sql - 创建 View 和 For Json 子句