2017-05-02 4 views
0

DOMにデータを追加するにはC#Json.Encodeを使用しています。ASP.NET CORE Razor、円参照を無視するようにJson.Encodeを設定するにはどうすればよいですか?

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

ただし、私たちのモデルにはいくつかの循環参照があります。

これらの循環参照を無視するようにグローバルコンバータを構成することはできますか。

+1

確かにわかりませんが、モデルのプロパティを飾ることで、シリアル化や循環参照を防ぐことができると思います。https://msdn.microsoft.com/en-us/library/system.web.script.serialization scriptignoreattribute.aspx – Stefan

答えて

1

[ScriptIgnore]属性を循環参照を開始するプロパティに追加します。たとえば:

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

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

だから、あなたがfooのインスタンスを持っていると仮定すると、JSONシリアライザはBar参照掘り下げますが、それは無視されますので、そこに、Foo参照に続行されません。

ただし、この方法は1通りしかできません。 Barのインスタンスで開始すると、Fooの参照はまったく取得されません。これは、単に無視されるためです。このようなさまざまなシナリオを処理する必要がある場合は、個別のクラス(ビューモデル、DTOなど)を使用する必要があります。循環参照が最初に存在しないように設定するだけです。これはちょうど良いことではない、一般に。つまり、最初に[ScriptIgnore]の代わりにカスタムビルドされたクラスを使用することができます。

+0

スクリプトの無視を追加するだけでは不十分です。 'override 'で' scriptignore'を追加する必要があります –

+0

実際にあなたがプロパティをオーバーライドしている場合、つまりそのプロパティは基本クラスの属性なしで既に定義されています。 –

+0

を明確にする。属性に '[ScriptIgnore(ApplyToOverrides = true)]'を追加する必要があります。私はそれを上書きする他のクラスを作成していません。しかし、私はASP.NETが私のクラスをオーバーライドする動的型を作成すると思われます。 –

関連する問題