Newtonsoft.Json.JsonSerializationException"检测到自引用循环"在库代码中

时间:2015-08-28 15:23:30

标签: json.net

我有自引用数据:每个项目包含一个Scrapbooks列表,它是其成员,每个Scrapbook包含它包含的项目列表。显然,这是循环的,所以当Scrapbook被序列化时,我得到一个Newtonsoft.Json.JsonSerializationException"检测到自引用循环"错误。我们通过添加行

在Azure移动服务服务器上解决此问题
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;
<{1}}文件的App_Start()方法中的

。但在手机客户端,我在这行代码中得到了例外:

Global.asax.cs

其中_ScrapbookTable的类型为await _ScrapbookTable.UpdateAsync(liveScrapbook);

The documentation(以及other answers here)展示了如何解决此问题:

Microsoft.WindowsAzure.Services.MobileServices.IMobileServiceTable<Scrapbook>

但是这个修复假定我的代码在进行序列化,而不是在API函数的调用中(在我的情况下是Microsoft.WindowsAzure.Services.MobileServices.IMobileServiceTable<Scrapbook>.UpdateAsync)。

有没有办法可以用Json属性(例如[JsonObject(MemberSerialization.OptIn)])修饰Item和Scrapbook类来防止异常?

1 个答案:

答案 0 :(得分:3)

看起来我需要做的就是将IsReference attribute添加到我的Item类中:

[JsonObject(IsReference = true)]
public class Item

(如Boshoy's answer中针对类似问题的修复3所示)。