gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:02:34 29 4
gpt4 key购买 nike

当使用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com