jsog-jackson:序列化对象图
jsog-jackson: Serializing object graphs
我正在尝试使用 parent/child 引用序列化一个对象图,本质上我有一个如下所示的实体:
@Entity (name = "Container")
@JsonIdentityInfo(generator=JSOGGenerator.class)
public class Container {
public String type = "parent";
@JsonManagedReference ("child")
@OneToMany (mappedBy = "parent", cascade = CascadeType.PERSIST)
public List<Child> children;
}
@Entity (name = "Child")
@JsonIdentityInfo(generator=JSOGGenerator.class)
public class Child {
public String type = "child";
@JsonBackReference ("child")
@ManyToOne
public Parent parent;
}
当我尝试将其序列化到客户端时,这就是我得到的:
{
"type": "parent",
@id: 1
"children": [
{
"type": "child",
@id: 2
},
{ ... }
]
}
我看到所有对象的 @id
属性,但看不到任何 @ref
属性。如果我对 jsog 和 jsog-jackson 的理解是正确的,那么这就是实际应该序列化的内容:
{
"type": "parent",
@id: 1
"children": [
{
"type": "child",
@id: 2
@ref: 1
},
{ ... }
]
}
我真正想要的是一种在浏览器中恢复序列化 JSOG 后恢复对父级的原始反向引用的方法,这样我得到的不是 @ref
parent
属性 在每个 child
对象返回。
您使用两种相互冲突的方法来管理循环关系。您可以使用 JSOGGenerator 或 @JsonManagedReference 和 @JsonBackReference 注释。
JSOGGenerator 将在 JSON 序列化格式中包含 @id 和 @ref 属性,这对于以另一种语言(例如 JavaScript.
反序列化对象很有用
@JsonManagedReference 和@JsonBackReference 使用 Java class 信息来识别循环引用,随后该信息被排除在 JSON 序列化格式之外,因此另一种语言如 Java脚本无法反序列化对象,因为缺少所需的信息。
JSOGGenerator 的另一个好处是它可以处理深度嵌套的循环关系,而不是有限的父子关系。
我正在尝试使用 parent/child 引用序列化一个对象图,本质上我有一个如下所示的实体:
@Entity (name = "Container")
@JsonIdentityInfo(generator=JSOGGenerator.class)
public class Container {
public String type = "parent";
@JsonManagedReference ("child")
@OneToMany (mappedBy = "parent", cascade = CascadeType.PERSIST)
public List<Child> children;
}
@Entity (name = "Child")
@JsonIdentityInfo(generator=JSOGGenerator.class)
public class Child {
public String type = "child";
@JsonBackReference ("child")
@ManyToOne
public Parent parent;
}
当我尝试将其序列化到客户端时,这就是我得到的:
{
"type": "parent",
@id: 1
"children": [
{
"type": "child",
@id: 2
},
{ ... }
]
}
我看到所有对象的 @id
属性,但看不到任何 @ref
属性。如果我对 jsog 和 jsog-jackson 的理解是正确的,那么这就是实际应该序列化的内容:
{
"type": "parent",
@id: 1
"children": [
{
"type": "child",
@id: 2
@ref: 1
},
{ ... }
]
}
我真正想要的是一种在浏览器中恢复序列化 JSOG 后恢复对父级的原始反向引用的方法,这样我得到的不是 @ref
parent
属性 在每个 child
对象返回。
您使用两种相互冲突的方法来管理循环关系。您可以使用 JSOGGenerator 或 @JsonManagedReference 和 @JsonBackReference 注释。
JSOGGenerator 将在 JSON 序列化格式中包含 @id 和 @ref 属性,这对于以另一种语言(例如 JavaScript.
反序列化对象很有用@JsonManagedReference 和@JsonBackReference 使用 Java class 信息来识别循环引用,随后该信息被排除在 JSON 序列化格式之外,因此另一种语言如 Java脚本无法反序列化对象,因为缺少所需的信息。
JSOGGenerator 的另一个好处是它可以处理深度嵌套的循环关系,而不是有限的父子关系。