.NETJSONシリアル化中にフィールドを無視します。[XmlIgnore]に似ていますか?


80

.NET 3.5sp1でJSON文字列としてブラウザに送信されているPOCOクラスがあります。デフォルトのJSONシリアル化を使用しているだけで、無視したいフィールドがいくつかあります。[System.Xml.Serialization.XmlIgnore]に似た属性を付けて、シリアル化されないようにします。

回答:


121

モデルでScriptIgnore属性を次のように使用します。

public class Item
{
    [ScriptIgnore]
    public Item ParentItem { get; set; }
}

この特定のシナリオでは、Jsonシリアライザーから循環参照エラーが発生していたため、単に無視しました。私がされたSO上でここに同様の質問をして私はモデルとビューモデルとの差に投入されたとき。


1
POCOではなく生成されたEntityModelで、生成されたコードを編集したくない場合、生成されたエンティティモデルにScriptIgnore属性を追加する回避策はありますか?
hazimdikenli 2010

@hazimdikenliこれには部分クラスを利用する必要があるかもしれません。
アナンド2011

11
これを機能させるには、「System.Web.Extensions」への参照を追加することを忘れないでください
Levitikon 2011

1
これにより、toJson(Model)が不要なフィールドを戻すのを防ぐことができましたが、理想的にはAPIを使用して、クロスアノテーションを回避するために新しいモデルとコントローラーを使用して新しいエリアを作成する必要があります。おかげで1
ピョートル・クラ

27
[ScriptIgnore] 

あなたのハッカベリーです。


1
実は「ハックルベアラー」ですが、努力と映画に+1を差し上げます。:)
ブライアンレイ

8
元の答えは正しいです、彼は「ハックルベリー」ではなく「ハックルベリー」と言います。 imsdb.com/scripts/Tombstone.html
heisenberg

5
...「ハックルベリーフィン」のように-「正しいことをする」ことを本能的に努力する典型的な「すべての人」への言及-あなたが常に信頼できる真の友人...したがって、「私はあなたのハックルベリーです」 、「あなたは私を頼りにすることができる」という意味です。
ジョンホリデー

2

[ScriptIgnore(ApplyToOverrides = true)]テキストテンプレート(.tt)ファイルに追加するだけ です。

これが私のテキストテンプレートの一部です

#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#

codeStringGeneratorクラスの上の行にコードを挿入すると、自動生成され、次のようになります。

[ScriptIgnore(ApplyToOverrides = true)]
public virtual ICollection<Currency> Currencies { get; set; }

UsingDirectives挿入する関数も変更する必要がありました"using System.Web.Script.Serialization;"


ApplyToOverrides仮想プロパティでは非常に重要なようです
Todd

1

プロパティを内部として設定します。ただし、構造によって異なります。考慮に入れる。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.