627 Stimmen

JSON.NET-Fehler Selbstreferenzierende Schleife für Typ entdeckt

Ich habe versucht, die POCO-Klasse zu serialisieren, die automatisch aus dem Entity Data Model .edmx generiert wurde, und als ich

JsonConvert.SerializeObject 

Ich habe den folgenden Fehler erhalten:

Fehler Selbstreferenzierungsschleife für Typ System.data.entity entdeckt.

Wie kann ich dieses Problem lösen?

4voto

Mehmed Cuhadar Punkte 91

Einfach aktualisieren services.AddControllers() sur Startup.cs Datei

services.AddControllers()
  .AddNewtonsoftJson(options =>
      options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
   );

4voto

Lilach Rayzin Punkte 29

C#-Code:

            var jsonSerializerSettings = new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
            };

            var jsonString = JsonConvert.SerializeObject(object2Serialize, jsonSerializerSettings);

            var filePath = @"E:\json.json";

            File.WriteAllText(filePath, jsonString);

2voto

Syam Punkte 193

In .Net 5.x, aktualisieren Sie Ihre ConfigureServices Methode in startup.cs mit folgendem Code

public void ConfigureServices(IServiceCollection services)
{
    ----------------
    ----------------
    services.AddMvc().AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
    });
    ------------------
}

Standardmäßig unterstützt die Serialisierung (System.Text.Json.Serialization) keine Objekte mit Zyklen und bewahrt keine doppelten Referenzen. verwenden Erhalten Sie um die Erhaltung eindeutiger Objektreferenzen bei der Serialisierung und den Verbrauch von Metadaten zu ermöglichen, um erhaltene Referenzen bei der Deserialisierung zu lesen. MSDN-Link

2voto

FlyingV Punkte 1537

Mannschaft:

Dies funktioniert mit ASP.NET Core; Die Herausforderung besteht darin, wie Sie die Einstellung auf "ignorieren" setzen. Je nachdem, wie Sie Ihre Anwendung einrichten kann es ziemlich anspruchsvoll sein. Hier ist, was für mich gearbeitet.

Dies kann in Ihrem Abschnitt public void ConfigureServices(IServiceCollection services) platziert werden.

services.AddMvc().AddJsonOptions(opt => 
        { 
      opt.SerializerSettings.ReferenceLoopHandling =
      Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        });

2voto

Ali Raza Punkte 90

Es wurde bereits darüber gesprochen, dass zum Beispiel [JsonIgnore] der virtuellen Eigenschaft in der Klasse hinzugefügt wird:

[JsonIgnore]
public virtual Project Project { get; set; }

Ich werde auch eine andere Option, [JsonProperty(NullValueHandling = NullValueHandling.Ignore)], die die Eigenschaft aus der Serialisierung nur auslässt, wenn sie null ist:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public virtual Project Project { get; set; }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X