DataContractSerializerを使用してシリアル化するときにプロパティを無視するにはどうすればよいですか?


125

.NET 3.5SP1とDataContractSerializerを使用してクラスをシリアル化しています。SP1では、クラスにDataContract / DataMember属性を含める必要がなく、全体をシリアル化するように動作が変更されました。これは私が使用している動作ですが、シリアライザの1つのプロパティを無視する必要があります。これを行う1つの方法は、クラスにDataContract属性を追加し、含めるすべてのメンバーにDataMember属性を配置することです。しかし、私にはこれがうまくいかない理由があります。

だから私の質問は、DataContractSerializerにプロパティを無視させるために使用できる属性または何かがあるのですか?

回答:


176

5
ドメインレイヤーに適切なアセンブリ参照がなかったため、ドキュメントを読み間違え、それが.NET 4.5の新機能だと思ってしまいました。このスレッドを見つけて私のコメントを削除しようとしましたが、成功しませんでした(急いでいました)。その上、この回答の日付を見ると、ベルが鳴ったはずです... 2009 .NET 4.5の投稿...)時間を無駄にしてごめんね。
2013年

2
.NET 4.5の場合:System.Runtime.Serialization.IgnoreDataMemberAttributeはどのような場合にも機能します
SparK

1
サードパーティのライブラリでさえ、JSON.NETのような[IgnoreDataMember]のサポートが追加されています。
Doug

5
短い例では、これは実際に投票に値する答えになりますか?
TAW

1
この回答は不完全であるため、誤解を招く可能性があります。[IgnoreDataMember]クラスに[Serializable]属性がある場合は機能しません。詳細については、Dougの回答を参照してください。
Alex Fainshtein

165

さらに、DataContractSerializerは[Serializable]としてマークされたアイテムをシリアル化し、.NET 3.5 SP1以降ではマークされていないタイプもシリアル化して、匿名型のシリアル化をサポートできるようにします。

したがって、メンバーをシリアル化しないようにするには、クラスをどのように装飾したかによって異なります。

  • を使用した場合は、プロパティのを[DataContract]削除[DataMember]します。
  • を使用した場合は、プロパティのフィールドの前に[Serializable]追加[NonSerialized]します。
  • クラスを装飾していない場合は[IgnoreDataMember]、プロパティに追加する必要があります。

1
「あなたのクラスを飾った」plsはどういう意味ですか?
アラミン2015年

[DataContract]や[Serializable]など、クラスで属性を使用していない場合は、シリアル化したくないプロパティに[IgnoreDataMember]を追加します。Paulの回答を参照するか、checkoutall.com
Doug

8
これは、受け入れられた回答よりもはるかに有益です。
pvgoran 2017年

そのメンバーを無視してデータ構造/クラスのシリアル化を続行する方法はありますか?
ryanwebjackson 2017年

[Serializable]が使用されている場合、PROPERTYを除外しませんか?
ダニエル

31

XMLシリアル化では、[XmlIgnore]属性(System.Xml.Serialization.XmlIgnoreAttribute)を使用して、クラスをシリアル化するときにプロパティを無視できます。

これはあなたに役立つかもしれません(または、私がそうであったように、XMLでシリアル化するときにプロパティを無視する方法を見つけようとしたときにこの質問を見つけた人に役立つかもしれません)。


4
ああ、反対票。クラスをシリアル化するときにプロパティを無視する方法を検索したときに、この投稿が表示されたので、私はそれを投稿すると思いました。そして、誰かがこの投稿を私と同じ方法で見つけた場合は、ここに置きたかったのです。
クリスアダムス

[メタに]私はXMLSerializationについてあなたは、別の(よりespecific)を開く必要があるため、彼らは負の投票質問を考え、人々はその質問より関連性の彼らの検索で見つけるだろうので、それに答える
SPARK

8
この答えはまさに私が探していたものです
aclave1 2014年


0

あなたの言っていることは、次の場所にあるMSDNライブラリでのそれと矛盾しています:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx

おっしゃるSP1機能についての言及はありません。


1
ドキュメントはこちら(3番目の段落、2番目の文)にあります:msdn.microsoft.com/en-us/library/ms733127.aspx
NotDan

あなたが投稿したリンクについてはあなたは正しいのですが、なぜ彼らがそこにそれを言及しないのかはわかりません。
NotDan 2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.