2017-05-02 3 views
0

Ich verwende C# Json.Encode, um einige Daten in unser DOM hinzuzufügen.ASP.NET CORE Razor, wie Json.Encode konfigurieren, um Zirkelverweise zu ignorieren?

<div data-model='@Json.Encode(cliente)'> 

Allerdings gibt es einige zirkuläre Referenz in unserem Modell.

Ist es möglich, den globalen Konverter so zu konfigurieren, dass diese Zirkelreferenzen ignoriert werden?

+1

Nicht sicher, aber ich denke, dass Sie Ihre Eigenschaften des Modells dekorieren können, um Serialisierung und damit Zirkelverweise zu verhindern: https://msdn.microsoft.com/en-us/library/system.web.script.serialization. scriptignoreattribute.aspx – Stefan

Antwort

1

Fügen Sie der Eigenschaft, die den Zirkelverweis starten würde, das Attribut [ScriptIgnore] hinzu. Zum Beispiel:

public class Foo 
{ 
    public Bar Bar { get; set; } 
} 

public class Bar 
{ 
    [ScriptIgnore] 
    public Foo Foo { get; set; } 
} 

Also, vorausgesetzt, Sie eine Instanz von foo haben, werden die JSON Serializer in den Bar Bezug zu vertiefen, werden aber nicht in die Foo Referenz weiter, dort, weil es ignoriert wird.

Sie können dies jedoch nur in eine Richtung tun. Wenn Sie mit einer Instanz von Bar beginnen, werden Sie die Foo Referenz überhaupt nicht erhalten, weil es wieder einfach ignoriert wird. Wenn Sie verschiedene Szenarien wie diese behandeln müssen, müssen Sie separate Klassen verwenden (nennen Sie sie Ansichtsmodelle, DTOs, was auch immer), wo Sie es einfach so einrichten, dass der Zirkelverweis überhaupt nicht existiert. Dies ist keine schlechte Idee, einfach zu tun, im Allgemeinen. Mit anderen Worten, Sie können anstelle von [ScriptIgnore] in erster Linie benutzerdefinierte Klassen verwenden.

+0

Das Hinzufügen von Skript ignorieren war nicht genug. Es muss 'scriptignore' mit' override' hinzugefügt werden. –

+0

Nur wenn Sie die Eigenschaft tatsächlich überschreiben, dh die Eigenschaft wurde bereits ohne dieses Attribut in einer Basisklasse definiert. –

+0

nur zur Klärung. Ich muss '' ScriptIgnore (ApplyToOverrides = true)] 'zu dem Attribut hinzufügen. Ich habe keine andere Klasse erstellt, die es überschrieben hat. Allerdings vermute ich, dass ASP.NET einen dynamischen Typ erstellt, der meine Klasse überschreibt. –

Verwandte Themen