У меня есть база данных mssql для моего веб-сайта в 4 таблицах.
Когда я использую это:
public static string GetAllEventsForJSON()
{
using (CyberDBDataContext db = new CyberDBDataContext())
{
return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
}
}
Код приводит к следующей ошибке:
Newtonsoft.Json.JsonSerializationException: для свойства CyberUser с типом DAL.CyberUser обнаружен цикл саморегулирования. Путь '[0] .EventRegistrations [0] .CyberUser.UserLogs [0]'.
c#
serialization
json.net
Страстный разработчик
источник
источник
Ответы:
У меня была такая же проблема с родительскими / дочерними коллекциями, и я нашел этот пост, который решил мой случай. Я только хотел показать список элементов родительской коллекции и не нуждался ни в каких дочерних данных, поэтому я использовал следующее, и он работал нормально:
Ошибка JSON.NET Обнаружен цикл саморегулирования для типа
он также относится к странице кодового комплекса Json.NET по адресу:
http://json.codeplex.com/discussions/272371
Документация: настройка ReferenceLoopHandling
источник
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
как описано здесь: resolve-self-referencing-loop-issue-when-using-newtonsoft-jsonИсправление состоит в том, чтобы игнорировать ссылки на циклы, а не сериализовать их. Это поведение указано в
JsonSerializerSettings
.Одиночный
JsonConvert
с перегрузкой:Если вы хотите сделать это поведением по умолчанию, добавьте глобальную настройку с кодом
Application_Start()
в Global.asax.cs:Ссылка: https://github.com/JamesNK/Newtonsoft.Json/issues/78
источник
Если вы используете ASP.NET Core MVC, добавьте это в метод ConfigureServices вашего файла startup.cs:
источник
Это может вам помочь.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
источник
code
Public Sub New () Mybase.New ("name = EntityConName") End Subcode
. Теперь перед End Sub добавьтеcode
Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = False.code
Это избавит от ошибки «Самостоятельная ссылка цикла» в вашем json-выходе из webapi.Вы должны установить Сохранение ссылок на объекты:
Затем вызовите свой запрос,
var q = (from a in db.Events where a.Active select a).ToList();
напримерСм. Https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
источник
Добавьте «[JsonIgnore]» в свой класс модели
источник
Я использую Dot.Net Core 3.1 и искал
Я добавляю это к этому вопросу, так как это будет легкая справка. В файле Startup.cs следует использовать следующее:
источник
для ядра asp.net 3.1.3 это сработало для меня
источник
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
источник
Иногда у вас есть циклы, потому что ваш класс типа имеет ссылки на другие классы и эти классы имеют ссылки на ваш класс типа, поэтому вам нужно выбрать параметры, которые вам нужны, именно в строке json, как этот код.
источник