シリアル化可能な型

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

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

シリアル化の既定

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

  • DataContractSerializer は、新しく作成した型の既定のプロパティを使用して、属性のない型からデータ コントラクトを推論します。
  • すべてのパブリック フィールドと、パブリック get メソッドおよび set メソッドを持つプロパティは、IgnoreDataMemberAttribute 属性をそのメンバに適用しない限りシリアル化されます。
  • シリアル化のセマンティクスは XmlSerializer に似ています。
  • マークされていない型では、パラメータのないコンストラクタを持つパブリック型のみがシリアル化されます。このルールの例外として、IExtensibleDataObject インターフェイスとして使用される ExtensionDataObject があります。
  • 読み取り専用フィールド、get メソッドまたは set メソッドのないプロパティ、内部またはプライベート set メソッドまたは get メソッドのあるプロパティはシリアル化されません。そのようなプロパティは無視され、例外はスローされません。ただし、取得専用のコレクションの場合は除きます。
  • XmlSerializer 属性 (XmlElementXmlAttributeXmlIgnoreXmlInclude など) は無視されます。
  • DataContractAttribute 属性を指定の型に適用しない場合は、シリアライザは DataMemberAttribute 属性が適用されるその型のすべてのメンバを無視します。
  • KnownTypes プロパティは DataContractAttribute 属性でマークされていない型でサポートされます。これには、マークされていない型での KnownTypeAttribute 属性のサポートも含まれます。
  • パブリック メンバ、プロパティ、またはフィールドのシリアル化のプロセスを "取り消す" には、IgnoreDataMemberAttribute 属性をそのメンバに適用します。

継承

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

関連項目

リファレンス

IgnoreDataMemberAttribute
DataContractAttribute
DataMemberAttribute
XmlSerializer

概念

データ コントラクト シリアライザでサポートされる型