シリアル化可能な型

既定では、DataContractSerializer は公開されている型をすべてシリアル化します。 その型の読み書き可能なパブリック プロパティおよびパブリック フィールドは、すべてシリアル化されます。

既定の動作を変更するには、DataContractAttribute 属性と DataMemberAttribute 属性を型とメンバーに適用します。この機能は、使用するコントロールに型がない場合や属性を追加するように変更できない場合に役立ちます。 DataContractSerializer は "マークされていない" 型を認識します。

シリアル化の既定

DataContractAttribute 属性と DataMemberAttribute 属性を適用して、型とメンバーのシリアル化を明示的に制御またはカスタマイズできます。 さらに、これらの属性をプライベート フィールドに適用することもできます。 ただし、これらの属性でマークされていない型もシリアル化および逆シリアル化されます。 次のルールと例外が適用されます。

  • DataContractSerializer は、新しく作成した型の既定のプロパティを使用して、属性のない型からデータ コントラクトを推論します。

  • すべてのパブリック フィールドと、パブリック get メソッドおよび set メソッドを持つプロパティは、IgnoreDataMemberAttribute 属性をそのメンバーに適用しない限りシリアル化されます。

  • シリアル化のセマンティクスは XmlSerializer に似ています。

  • マークされていない型では、パラメーターのないコンストラクターを持つパブリック型のみがシリアル化されます。 このルールの例外として、ExtensionDataObject インターフェイスとして使用される IExtensibleDataObject があります。

  • 読み取り専用フィールド、get メソッドまたは set メソッドのないプロパティ、内部またはプライベート set メソッドまたは get メソッドのあるプロパティはシリアル化されません。 そのようなプロパティは無視され、例外はスローされません。ただし、取得専用のコレクションの場合は除きます。

  • XmlSerializer 属性 (XmlElementXmlAttributeXmlIgnoreXmlInclude など) は無視されます。

  • DataContractAttribute 属性を指定の型に適用しない場合は、シリアライザーは DataMemberAttribute 属性が適用されるその型のすべてのメンバーを無視します。

  • KnownTypes プロパティは DataContractAttribute 属性でマークされていない型でサポートされます。 これには、マークされていない型での KnownTypeAttribute 属性のサポートも含まれます。

  • パブリック メンバー、プロパティ、またはフィールドのシリアル化のプロセスを "取り消す" には、IgnoreDataMemberAttribute 属性をそのメンバーに適用します。

継承

マークされていない型 (DataContractAttribute 属性のない型) は、この属性を持つ型から継承できます。ただし、その反対はできません。つまり、マークされていない型から属性を持つ型を継承することはできません。 このルールは、主として、以前のバージョンの .NET Framework で記述されたコードとの下位互換性を保つために適用されます。

関連項目