シリアル化可能な型Serializable Types

既定では、DataContractSerializer は公開されている型をすべてシリアル化します。By default, the DataContractSerializer serializes all publicly visible types. その型の読み書き可能なパブリック プロパティおよびパブリック フィールドは、すべてシリアル化されます。All public read/write properties and fields of the type are serialized.

既定の動作を変更するには、DataContractAttribute 属性と DataMemberAttribute 属性を型とメンバーに適用します。この機能は、使用するコントロールに型がない場合や属性を追加するように変更できない場合に役立ちます。You can change the default behavior by applying the DataContractAttribute and DataMemberAttribute attributes to the types and members This feature can be useful in situations in which you have types that are not under your control and cannot be modified to add attributes. DataContractSerializer は "マークされていない" 型を認識します。The DataContractSerializer recognizes such "unmarked" types.

シリアル化の既定Serialization Defaults

DataContractAttribute 属性と DataMemberAttribute 属性を適用して、型とメンバーのシリアル化を明示的に制御またはカスタマイズできます。You can apply the DataContractAttribute and DataMemberAttribute attributes to explicitly control or customize the serialization of types and members. さらに、これらの属性をプライベート フィールドに適用することもできます。In addition, you can apply these attributes to private fields. ただし、これらの属性でマークされていない型もシリアル化および逆シリアル化されます。However, even types that are not marked with these attributes are serialized and deserialized. 次のルールと例外が適用されます。The following rules and exceptions apply:

  • DataContractSerializer は、新しく作成した型の既定のプロパティを使用して、属性のない型からデータ コントラクトを推論します。The DataContractSerializer infers a data contract from types without attributes using the default properties of the newly created types.

  • すべてのパブリック フィールドと、パブリック get メソッドおよび set メソッドを持つプロパティは、IgnoreDataMemberAttribute 属性をそのメンバーに適用しない限りシリアル化されます。All public fields, and properties with public get and set methods are serialized, unless you apply the IgnoreDataMemberAttribute attribute to that member.

  • シリアル化のセマンティクスは XmlSerializer に似ています。The serialization semantics are similar to those of the XmlSerializer.

  • マークされていない型では、パラメーターのないコンストラクターを持つパブリック型のみがシリアル化されます。In unmarked types, only public types with constructors that do not have parameters are serialized. このルールの例外として、ExtensionDataObject インターフェイスとして使用される IExtensibleDataObject があります。The exception to this rule is ExtensionDataObject used with the IExtensibleDataObject interface.

  • 読み取り専用フィールド、get メソッドまたは set メソッドのないプロパティ、内部またはプライベート set メソッドまたは get メソッドのあるプロパティはシリアル化されません。Read-only fields, properties without a get or set method, and properties with internal or private set or get methods are not serialized. そのようなプロパティは無視され、例外はスローされません。ただし、取得専用のコレクションの場合は除きます。Such properties are ignored and no exception is thrown, except in the case of get-only collections.

  • XmlSerializer 属性 (XmlElementXmlAttributeXmlIgnoreXmlInclude など) は無視されます。XmlSerializer attributes (such as XmlElement, XmlAttribute, XmlIgnore, XmlInclude, and so on) are ignored.

  • DataContractAttribute 属性を指定の型に適用しない場合は、シリアライザーは DataMemberAttribute 属性が適用されるその型のすべてのメンバーを無視します。If you do not apply the DataContractAttribute attribute to a given type, the serializer ignores any member in that type to which the DataMemberAttribute attribute is applied.

  • KnownTypes プロパティは DataContractAttribute 属性でマークされていない型でサポートされます。The KnownTypes property is supported in types not marked with the DataContractAttribute attribute. これには、マークされていない型での KnownTypeAttribute 属性のサポートも含まれます。This includes support for the KnownTypeAttribute attribute on unmarked types.

  • パブリック メンバー、プロパティ、またはフィールドのシリアル化のプロセスを "取り消す" には、IgnoreDataMemberAttribute 属性をそのメンバーに適用します。To "opt out" of the serialization process for public members, properties, or fields, apply the IgnoreDataMemberAttribute attribute to that member.

継承Inheritance

マークされていない型 (DataContractAttribute 属性のない型) は、この属性を持つ型から継承できます。ただし、その反対はできません。つまり、マークされていない型から属性を持つ型を継承することはできません。Unmarked types (types without the DataContractAttribute attribute) can inherit from types that do have this attribute; however, the reverse is not permitted: types with the attribute cannot inherit from unmarked types. このルールは、以前のバージョンの .NET Framework で記述されたコードとの下位互換性を確保するために主に適用されます。This rule is enforced primarily to ensure backward compatibility with code written in earlier versions of .NET Framework.

関連項目See also