У меня есть собственные референтные данные: каждый элемент содержит список альбомов Scrapbooks, в которых он входит, и каждый Scrapbook содержит список элементов, которые он содержит. Очевидно, что это круговой, и поэтому, когда Scrapbook сериализуется, я получаю сообщение об ошибке Newtonsoft.Json.JsonSerializationException «Ошибка саморегуляции». Мы получаем вокруг этого на нашем сервере Mobile Services Azure, добавив строкуNewtonsoft.Json.JsonSerializationException «Исключительный цикл регистрации ссылок» в библиотечном коде
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize;
в App_Start()
методе файла Global.asax.cs
. Но в клиенте телефона я получаю исключение в этой строке кода:
await _ScrapbookTable.UpdateAsync(liveScrapbook);
где _ScrapbookTable имеет тип Microsoft.WindowsAzure.Services.MobileServices.IMobileServiceTable<Scrapbook>
.
The documentation (и other answers here) показать, как это исправить:
var json = JsonConvert.SerializeObject(joe, Formatting.Indented, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
Но это исправление предполагает, что мой код делает сериализации, а не он, находясь внутри вызова функции API (в моем случае Microsoft.WindowsAzure.Services.MobileServices.IMobileServiceTable<Scrapbook>.UpdateAsync
).
Есть ли способ, которым я мог бы украсить классы Item и Scrapbook атрибутами Json (например, [JsonObject(MemberSerialization.OptIn)]
), чтобы предотвратить исключение?