.NET 3.5SP1とDataContractSerializerを使用してクラスをシリアル化しています。 SP1では、クラスにDataContract/DataMember属性を含める必要がなく、すべてをシリアル化するように動作が変更されました。これは私が使用している動作ですが、今度はシリアライザーの1つのプロパティを無視する必要があります。これを行う1つの方法は、DataContract属性をクラスに追加し、含めるメンバーすべてにDataMember属性を追加することです。しかし、私にはこれがうまくいかない理由があります。
だから私の質問は、DataContractSerializerにプロパティを無視させるために使用できる属性または何かがありますか?
さらに、DataContractSerializerは[Serializable]としてマークされた項目をシリアル化し、匿名型のシリアル化のサポートを可能にするために、.NET 3.5 SP1以降でマークされていない型もシリアル化します。
したがって、メンバーのシリアル化を防ぐ方法については、クラスをどのように装飾したかによって異なります。
[DataContract]
を使用した場合は、プロパティの[DataMember]
を削除します。[Serializable]
を使用した場合、プロパティのfieldの前に[NonSerialized]
を追加します。[IgnoreDataMember]
をプロパティに追加する必要があります。XMLシリアル化では、[XmlIgnore]属性(System.Xml.Serialization.XmlIgnoreAttribute)を使用して、クラスをシリアル化するときにプロパティを無視できます。
これはあなたにとって役に立つかもしれません(または、私がそうであったように、XMLでシリアライズするときにプロパティーを無視する方法を見つけようとするときに、この質問を見つけた人にとって役に立つかもしれません)。
[NonSerialized()]属性でフィールドをマークしてみてください。これは、フィールドを無視するようにシリアライザーに指示します。
https://msdn.Microsoft.com/en-us/library/system.nonserializedattribute(v = vs.110).aspx
あなたが言っていることは、この場所にあるMSDNライブラリでそれが言っていることと矛盾しています:
http://msdn.Microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx
あなたが言及したSP1機能については何も言及していません。