4

我正在尝试序列化一个对象(特别是开源 UnitClassLibrary 中的一个距离对象)。因为这个库显然不支持序列化,所以我愿意为我的目的对其进行修改。

但是,我不确定如何诊断正在发生的这个问题。尝试使用 JSON.net 序列化对象时出现以下错误(我也尝试使用内置工具进行 XML 序列化并得到类似的错误)。

Additional information: Self referencing loop detected for property 'EqualityStrategy' with type 'UnitClassLibrary.DistanceEqualityStrategy'. Path ''.

但是,我似乎在距离对象的代码中找不到任何自引用循环。我该如何诊断这个问题?

我目前只是想像这样序列化:

        Distance newDistance = new Distance();
        var json = JsonConvert.SerializeObject(newDistance);

这导致了错误。我可以修改我正在使用的库,但我没有。

4

1 回答 1

2

在过去,我看到当一个对象中有一个嵌套对象引用回原始对象时会导致这个问题。

例如,假设您有一个名为 Project 的对象,它有一个对象类型 User 的属性。现在 User 对象内部是一个嵌套对象,它引用回原始 Project 对象。

通过使用以下 JsonSerializerSetting,我已经能够忽略嵌套循环序列化。

在下面的示例中,projects 是 Project 对象的列表。

string json = Newtonsoft.Json.JsonConvert.SerializeObject(projects, Newtonsoft.Json.Formatting.Indented,
                new Newtonsoft.Json.JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                    }
                );
于 2015-06-03T20:37:14.630 回答