我有自引用数据:每个项目包含一个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类来防止异常?
答案 0 :(得分:3)
看起来我需要做的就是将IsReference attribute添加到我的Item类中:
[JsonObject(IsReference = true)]
public class Item
(如Boshoy's answer中针对类似问题的修复3所示)。