【发布时间】:2015-10-10 23:23:58
【问题描述】:
有没有一种理智的方法可以让 Gson 以不同于顶层的方式处理嵌套对象?要序列化的东西是实体,它们都有一个id。嵌套实体应替换为其id(以缩短输出并可能对抗无休止的递归)。
假设有一个
@AllArgsConstructor class User {
int id;
String name;
User parent;
}
然后我执行
User grampa = new User(3, "Grampa", null);
User homer = new User(2, "Homer", grampa);
User bart = new User(1, "Bart", homer);
序列化bart时得到的是
{
id: 1,
name: "Bart",
father: {
id: 2,
name: "Homer",
father: {
id: 3,
name: "Grampa"
}
}
}
这比我需要的要多得多。我其实从不想序列化嵌套实体,它们的ids 已经足够好了。
使用 global 线程局部变量 hack 和 TypeAdapterFactory 我可以得到
{
id: 1,
name: "Bart",
father: 2,
}
这几乎是我想要的。我更喜欢fatherId 而不是father,而且我肯定更喜欢比全局变量更简单的东西。
我不想创建 DAO、反射性地扫描对象或类似的方式(然后我可以自己完成整个序列化,不是吗?)。
【问题讨论】:
-
我很难理解这种转变。感觉很多信息都消失了。
-
@SotiriosDelimanolis 现在好点了吗?
-
你想要 Jackson 的 object identity 给 Gson 吗? Gson 扩展 GraphAdapterBuilder 让您可以做到这一点。
标签: java serialization gson