既定では、 DataContractSerializer はすべてのパブリックに表示される型をシリアル化します。 型のすべてのパブリック読み取り/書き込みプロパティとフィールドがシリアル化されます。
既定の動作を変更するには、 DataContractAttribute 属性と DataMemberAttribute 属性を型とメンバーに適用します。この機能は、コントロールの下にない型があり、属性を追加するように変更できない場合に役立ちます。 DataContractSerializerは、このような "マークされていない" 型を認識します。
シリアル化の既定値
DataContractAttribute属性とDataMemberAttribute属性を適用して、型とメンバーのシリアル化を明示的に制御またはカスタマイズできます。 さらに、これらの属性をプライベート フィールドに適用することもできます。 ただし、これらの属性でマークされていない型もシリアル化および逆シリアル化されます。 次の規則と例外が適用されます。
DataContractSerializerは、新しく作成された型の既定のプロパティを使用して、属性のない型からデータ コントラクトを推論します。
get
属性をそのメンバーに適用しない限り、パブリックset
メソッドとIgnoreDataMemberAttribute メソッドを持つすべてのパブリック フィールドとプロパティがシリアル化されます。シリアル化セマンティクスは、 XmlSerializerのものと似ています。
マークされていない型では、パラメーターを持たないコンストラクターを持つパブリック型のみがシリアル化されます。 この規則の例外は、ExtensionDataObject を用いた IExtensibleDataObject インターフェイスです。
読み取り専用フィールド、
get
メソッドまたはset
メソッドのないプロパティ、および内部メソッドまたはプライベートset
メソッドまたはget
メソッドを持つプロパティはシリアル化されません。 そのようなプロパティは無視され、例外はスローされません。ただし、取得専用のコレクションの場合は除きます。XmlSerializer 属性 (
XmlElement
、XmlAttribute
、XmlIgnore
、XmlInclude
など) は無視されます。DataContractAttribute属性を特定の型に適用しない場合、シリアライザーは、DataMemberAttribute属性が適用されているその型のメンバーを無視します。
KnownTypes プロパティは、DataContractAttribute属性でマークされていない型でサポートされています。 これには、マークされていない型の KnownTypeAttribute 属性のサポートが含まれます。
パブリック メンバー、プロパティ、またはフィールドのシリアル化プロセスを "オプトアウト" するには、そのメンバーに IgnoreDataMemberAttribute 属性を適用します。
継承
マークされていない型 ( DataContractAttribute 属性を持たない型) は、この属性を持つ型から継承できますが、逆の処理は許可されません。属性を持つ型は、マークされていない型から継承できません。 この規則は、主に以前のバージョンの .NET Framework で記述されたコードとの下位互換性を確保するために適用されます。