我正在尝试序列化一个对象(具体来说,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对象的代码中找到任何自引用循环。我怎样才能诊断出这个问题?
我目前只是尝试像这样序列化:
Distance newDistance = new Distance();
var json = JsonConvert.SerializeObject(newDistance);
导致错误。我可以修改我正在使用的库,但我没有。
答案 0 :(得分:2)
在过去,我看到当一个对象中有一个引用回原始对象的嵌套对象时引起的这个问题。
例如,假设您有一个名为Project的对象,它的属性是User类型的对象。现在,User对象内部是一个引用回原始Project对象的嵌套对象。
通过使用以下JsonSerializerSetting,我可以忽略嵌套的循环序列化。
在下面的示例中,项目是Project对象的列表。
string json = Newtonsoft.Json.JsonConvert.SerializeObject(projects, Newtonsoft.Json.Formatting.Indented,
new Newtonsoft.Json.JsonSerializerSettings()
{
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
}
);