3

我正在尝试在 JSON.NET 中序列化一个对象图,其中一个 Galaxy 包含 StarSystems,一个 StarSystem 包含行星,一个行星包含一个殖民地,一个殖民地有一个所有者,并且银河也有一个帝国列表,每个帝国有一个探索过的 StarSystems 的列表。所以 StarSystem、Planet 和 Empire 之间存在循环引用。

我不明白的是我在序列化对象图时得到的行为。当我将参考循环处理设置为默认值时并没有抛出错误,而是在我将其设置为序列化模式时尝试序列化所有内容,它似乎是在序列化链中的一些链接,然后放弃并设置任意值(在我的情况下,探索的恒星系统)为空。当它寻找星型系统但只找到空值时,这自然会导致应用程序的其他地方崩溃!

这可能与链中的某些链接不是直接引用而是集合这一事实有关吗?例如,一个帝国没有一个探索过的星系,而是一个列表。

那么如何让 JSON.NET 序列化所有内容呢?我是否需要消除循环引用并只传递对象的 ID 而不是对象模型中的实际对象引用?我真的不想仅仅为了序列化目的而这样做!

4

2 回答 2

1

我想出了一个解决方法。不是每个帝国都存储一个探索过的星系列表,而是每个星系都会存储一个探索过它的帝国列表。这样,没有循环引用!

于 2013-05-10T18:17:12.660 回答
0

不知道我是怎么做到的,但看起来现在我只是将 null 添加到已探索的恒星系统列表中,而不是替换已探索的恒星系统列表,所以我可以将其过滤掉。对不起,我不知道我做了什么来解决这个问题!

于 2013-05-10T07:21:52.800 回答