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