c# – 尝试序列化时出现自引用循环错误

我试图序列化一个对象(特别是,
a distance object in the opensource UnitClassLibrary).因为这个库显然不支持序列化,所以我愿意为我的目的修改它.

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

附加信息:为属性“EqualityStrategy”检测到自我引用循环,类型为“UnitClassLibrary.DistanceEqualityStrategy”.路径”.

但是,我似乎无法在Distance对象的代码中找到任何自引用循环.我怎样才能诊断出这个问题?

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

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

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

最佳答案 在过去,我已经看到当一个对象在其中有一个引用回原始对象的嵌套对象时引起的这个问题.

例如,假设您有一个名为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
                    }
                );
点赞