我正在编写一个序列化程序来将POJO序列化为JSON,但是陷入了循环引用的问题。在hibernate的双向一对多关系中,parent引用回父对象的子引用和子引用,这时我的序列化程序就完蛋了。(参见下面的示例代码)
如何打破这个循环?我们可以得到一个对象的所有者树来查看对象本身是否存在于它自己的所有者层次结构中的某个地方吗?有没有其他方法来确定引用是否将是循环的?或任何其他想法来解决这个问题?
发布于 2010-07-27 11:20:05
双向关系甚至可以用JSON表示吗?某些数据格式不适合某些类型的数据建模。
在处理遍历对象图时,处理循环的一种方法是跟踪到目前为止看到的对象(使用标识比较),以防止自己遍历无限循环。
发布于 2010-07-29 14:12:27
Jackson 1.6 (发布于2010年9月)具有特定的基于注释的支持,用于处理此类父/子链接,请参阅http://wiki.fasterxml.com/JacksonFeatureBiDirReferences。(Wayback Snapshot)
当然,您可以排除已经使用大多数JSON处理包(jackson、gson和flex-json至少支持它)的父链接的序列化,但真正的诀窍在于如何将其反序列化(重新创建父链接),而不仅仅是处理序列化方面。虽然现在听起来只是排除可能对你有用。
编辑(2012年4月):Jackson 2.0现在支持真正的identity references (Wayback Snapshot),所以你也可以这样解决它。
发布于 2014-11-17 18:45:10
我使用了一个类似于亚瑟的解决方案,但没有使用setExclusionStrategies
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create();
并对json中需要的字段使用了@Expose
gson注释,排除了其他字段。
https://stackoverflow.com/questions/3340485
复制相似问题