检测到自引用循环&;在Newtonsoft.Json
本文关键字:Newtonsoft Json 自引用 循环 检测 | 更新日期: 2023-09-27 18:09:40
对于这个代码…
private void Label1_MouseUp(object sender, RoutedEventArgs e)
{
Newtonsoft.Json.Linq.JObject.FromObject(e).ToString();
}
我得到这个错误…
Self referencing loop detected with type 'System.Windows.Documents.Run'. Path 'MouseDevice.Target.Inlines[0].SiblingInlines'.
还有很多其他类似的问题,但我不知道如何在我的情况下实现解决方案(我正在学习c#)。例如,添加ReferenceLoopHandling = ReferenceLoopHandling.Ignore
,但不知道放在哪里。
(顺便说一下,我正试图找到一种简单的通用方式来打印调试信息)
在你的问题中,你说你不知道把ReferenceLoopHandling = ReferenceLoopHandling.Ignore
放在哪里。你可以把它放在对FromObject的调用中,如下所示:
JObject.FromObject(e, new JsonSerializer() {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
这是一个到JObject的链接。FromObject文档:http://james.newtonking.com/json/help/index.html?topic=html/CreatingLINQtoJSON.htm
是的,这是很常见的问题,错误信息说明了一切。
正如你所猜测的那样,你得到的是已经序列化的引用,从而导致无限次递归操作来序列化该对象。如果您将其标记为忽略ReferenceLoopHandling
,该系列将继续工作并将生成StackoverflowException
。
相反,你有几个解决方案,这里有两个:
- 您可以识别哪个属性导致了循环,并且如果不需要,设置为
null
。 - 您可以创建另一个类特定于准备序列化对象,填充它,然后serilize。