提问人:zambotn 提问时间:10/13/2023 更新时间:10/13/2023 访问量:24
如何使 Jackson 数据绑定与 Json.Net 通信
How to make Jackson databind communicate with Json.Net
问:
因此,假设我在两个对象之间具有双向关系(省略了 getter 和 setter):
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
property="$id")
public class Author {
@JsonProperty("$id")
private int id;
private String name;
private List<Book> books;
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
property="$id")
public class Book {
@JsonProperty("$id")
private int id;
private String title;
private List<Author> authors;
}
然后,我可以创建一个要序列化的对象:
Author tolkien = new Author();
tolkien.id = 1;
tolkien.name = "J.R.R. Tolkien";
tolkien.books = Arrays.asList(new Book(), new Book());
tolkien.books.get(0).id = 2;
tolkien.books.get(0).title = "Lord of the Rings";
tolkien.books.get(0).authors = List.of(tolkien);
tolkien.books.get(1).id = 3;
tolkien.books.get(1).title = "The Dragon Hunter";
tolkien.books.get(1).authors = List.of(tolkien);
System.out.println(objectMapper.writeValueAsString(tolkien));
这将打印:
{
"$id" : 1,
"name" : "J.R.R. Tolkien",
"books" : [ {
"$id" : 2,
"title" : "Lord of the Rings",
"authors" : [ 1 ]
}, {
"$id" : 3,
"title" : "The Dragon Hunter",
"authors" : [ 1 ]
} ]
}
这是 99% 的工作,但 JSON.NET 序列化对象引用的方式更接近 JSON Schema 标准,并使用类似的 API,将引用编写为对象而不仅仅是 id(恕我直言,这要好得多,因为它允许从数据中识别引用):
{
"$id" : 1,
"name" : "J.R.R. Tolkien",
"books" : [ {
"$id" : 2,
"title" : "Lord of the Rings",
"authors" : [ {"$ref": 1} ]
}, {
"$id" : 3,
"title" : "The Dragon Hunter",
"authors" : [ {"$ref": 1} ]
} ]
}
如何使这两个服务从 Java/Jackson 端互操作(我无法修改 .NET 代码)?
答: 暂无答案
评论