2015-08-28 4 views
0

У меня есть собственные референтные данные: каждый элемент содержит список альбомов 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 documentationother 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)]), чтобы предотвратить исключение?

ответ

0

Похоже, все, что мне нужно сделать, это добавить IsReference attribute в мой класс Item:

[JsonObject(IsReference = true)] 
public class Item 

(как это было предложено в качестве Fix 3 в Boshoy's answer на аналогичный вопрос).

Смежные вопросы