Ich habe eine MSSQL-Datenbank für meine Website in 4 Tabellen.
Wenn ich das benutze:
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());
}
}
Der Code führt zu folgendem Fehler:
Newtonsoft.Json.JsonSerializationException: Selbstreferenzierende Schleife für Eigenschaft 'CyberUser' vom Typ 'DAL.CyberUser' erkannt. Pfad '[0] .EventRegistrations [0] .CyberUser.UserLogs [0]'.
c#
serialization
json.net
PassionateDeveloper
quelle
quelle
Antworten:
Ich hatte gerade das gleiche Problem mit Eltern / Kind-Sammlungen und fand den Beitrag, der meinen Fall gelöst hat. Ich wollte nur die Liste der übergeordneten Sammlungselemente anzeigen und benötigte keine der untergeordneten Daten. Daher habe ich Folgendes verwendet und es hat gut funktioniert:
JSON.NET-Fehler Selbstreferenzierende Schleife für Typ erkannt
Es verweist auch auf die Json.NET-Codeplex-Seite unter:
http://json.codeplex.com/discussions/272371
Dokumentation: ReferenceLoopHandling-Einstellung
quelle
PreserveReferencesHandling = PreserveReferencesHandling.Objects;
wie hier beschrieben verwenden: Lösen Sie das Problem der selbstreferenzierenden Schleife, wenn Sie newtonsoft-json verwendenDas Update besteht darin, Schleifenreferenzen zu ignorieren und nicht zu serialisieren. Dieses Verhalten ist in angegeben
JsonSerializerSettings
.Single
JsonConvert
mit Überlastung:Wenn Sie dies als Standardverhalten festlegen möchten , fügen Sie eine globale Einstellung mit Code
Application_Start()
in Global.asax.cs hinzu:Referenz: https://github.com/JamesNK/Newtonsoft.Json/issues/78
quelle
Wenn Sie ASP.NET Core MVC verwenden, fügen Sie dies der ConfigureServices-Methode Ihrer Datei startup.cs hinzu:
quelle
Dies kann Ihnen helfen.
http://code.msdn.microsoft.com/Loop-Reference-handling-in-caaffaf7
quelle
code
Public Sub New () Mybase.New ("name = EntityConName") End Subcode
.code
Fügen Sie jetzt vor End Sub Me.Configuration.LazyLoadingEnabled = False Me.Configuration.ProxyCreationEnabled = False hinzu. Dadurchcode
wird der Fehler "Selbstreferenzierende Schleife" in Ihrer JSON-Ausgabe von Webapi beseitigt.Sie müssen Preserving Object References festlegen:
Dann rufen Sie Ihre Anfrage
var q = (from a in db.Events where a.Active select a).ToList();
gerne anSiehe: https://www.newtonsoft.com/json/help/html/PreserveObjectReferences.htm
quelle
Fügen Sie Ihrer Modellklasse "[JsonIgnore]" hinzu
quelle
Ich verwende Dot.Net Core 3.1 und habe nach gesucht
Ich füge dies dieser Frage hinzu, da es eine einfache Referenz sein wird. In der Datei Startup.cs sollten Sie Folgendes verwenden:
quelle
für asp.net core 3.1.3 hat das bei mir funktioniert
quelle
JsonConvert.SerializeObject(ObjectName, new JsonSerializerSettings(){ PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented });
quelle
Manchmal haben Sie Schleifen, weil Ihre Typklasse Verweise auf andere Klassen hat und diese Klassen Verweise auf Ihre Typklasse haben. Daher müssen Sie die Parameter, die Sie benötigen, genau in der JSON-Zeichenfolge auswählen, wie diesen Code.
quelle