我正在尝试序列化一个对象(特别是 a distance object in the opensource 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);
这导致错误。我可以修改我正在使用的库,但我没有。
最佳答案
过去,我曾看到当对象中有一个嵌套对象并引用回原始对象时会导致此问题。
例如,假设您有一个名为 Project 的对象,它有一个对象类型 User 的属性。现在 User 对象内部是一个嵌套对象,引用回原始 Project 对象。
通过使用以下 JsonSerializerSetting,我已经能够忽略嵌套循环序列化。
在下面的示例中,项目是项目对象的列表。
string json = Newtonsoft.Json.JsonConvert.SerializeObject(projects, Newtonsoft.Json.Formatting.Indented,
new Newtonsoft.Json.JsonSerializerSettings()
{
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
}
);
关于c# - 尝试序列化时自引用循环错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30310859/