Mam bazę danych mssql dla mojej witryny w 4 tabelach.
Kiedy używam tego:
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());
}
}
Kod powoduje następujący błąd:
Newtonsoft.Json.JsonSerializationException: wykryto pętlę odwołującą się do siebie dla właściwości „CyberUser” o typie „DAL.CyberUser”. Ścieżka „[0] .EventRegistrations [0] .CyberUser.UserLogs [0]”.
c#
serialization
json.net
PassionateDeveloper
źródło
źródło
Odpowiedzi:
Właśnie miałem ten sam problem z kolekcjami Parent / Child i znalazłem ten post, który rozwiązał moją sprawę. Chciałem tylko pokazać Listę elementów kolekcji rodziców i nie potrzebowałem żadnych danych dziecka, dlatego użyłem następujących i działało dobrze:
Błąd JSON.NET Wykryto pętlę odwołującą się do siebie dla typu
odnosi się również do strony codeplex Json.NET pod adresem:
http://json.codeplex.com/discussions/272371
Dokumentacja: Ustawienie ReferenceLoopHandling
źródło
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
jak wyjaśniono tutaj: rozwiąż problem z odwoływaniem się do siebie w pętli podczas używania-newtonsoft-jsonRozwiązaniem jest ignorowanie odwołań do pętli i nie ich serializacja. To zachowanie jest określone w
JsonSerializerSettings
.Pojedynczy
JsonConvert
z przeciążeniem:Jeśli chcesz, aby było to zachowanie domyślne, dodaj ustawienie globalne z kodem
Application_Start()
w Global.asax.cs:Źródła: https://github.com/JamesNK/Newtonsoft.Json/issues/78
źródło
Jeśli używasz ASP.NET Core MVC, dodaj to do metody ConfigureServices pliku startup.cs: If using ASP.NET Core MVC, add this to the ConfigureServices method of your startup.cs file:
źródło
To może ci pomóc.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
źródło
code
Public Sub New () Mybase.New ("name = EntityConName") End Subcode
. Teraz przed End Sub dodajcode
Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = Falsecode
To usunie błąd „Pętla odwołująca się do siebie” w danych wyjściowych json z webapi.Musisz ustawić Zachowywanie odwołań do obiektów:
Następnie wywołać zapytanie
var q = (from a in db.Events where a.Active select a).ToList();
jakZobacz: https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
źródło
Dodaj „[JsonIgnore]” do swojej klasy modelu
źródło
Używam Dot.Net Core 3.1 i wyszukałem
Dodam to do tego pytania, ponieważ będzie to łatwe odniesienie. W pliku Startup.cs należy użyć następujących elementów:
źródło
dla asp.net core 3.1.3 to zadziałało
źródło
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
źródło
Czasami masz pętle, ponieważ twoja klasa typu ma odwołania do innych klas, a klasy mają odniesienia do twojej klasy typu, dlatego musisz wybrać parametry, których potrzebujesz, dokładnie w ciągu json, jak w tym kodzie.
źródło