データ コントラクト シリアライザーでサポートされる型Types Supported by the Data Contract Serializer

Windows Communication Foundation (WCF) は、を DataContractSerializer 既定のシリアル化エンジンとして使用して、データを xml に変換し、xml をデータに変換します。Windows Communication Foundation (WCF) uses the DataContractSerializer as its default serialization engine to convert data into XML and to convert XML back into data. DataContractSerializer は、 データ コントラクト 型をシリアル化するように設計されています。The DataContractSerializer is designed to serialize data contract types. ただし、暗黙のデータ コントラクトを持つと考えられるその他の型も多数サポートされています。However, it supports many other types, which can be thought of as having an implicit data contract. 以下は、シリアル化可能なすべての型です。The following is a complete list of types that can be serialized:

部分信頼モードにおける特定の型の使用制限Limitations of Using Certain Types in Partial Trust Mode

部分信頼モードのシナリオで型を使用する場合、型によっては次の制限があります。The following is a list of limitations when using certain types in partial trust mode scenarios:

  • 部分信頼コードで ISerializable を使用して DataContractSerializer を実装する型のシリアル化または逆シリアル化を行うには、 SerializationFormatter アクセス許可および UnmanagedCode アクセス許可が必要です。To serialize or deserialize a type that implements ISerializable in partially-trusted code using the DataContractSerializer requires the SerializationFormatter and UnmanagedCode permissions.

  • 部分信頼モードで WCF コードを実行する場合、フィールド (との両方) のシリアル化と逆シリアル化 readonly はサポートされ public private ていません。When running WCF code in Partial Trust mode, the serialization and deserialization of readonly fields (both public and private) is not supported. これは、生成された IL が検証不能であるため、より高いアクセス許可が必要になるためです。This is because the generated IL is unverifiable and therefore requires elevated permissions.

  • 部分信頼環境では、 DataContractSerializerXmlSerializer の両方がサポートされています。Both the DataContractSerializer and the XmlSerializer are supported in a partial trust environment. ただし、 DataContractSerializer の使用は、次の条件に従う必要があります。However, use of the DataContractSerializer is subject to the following conditions:

    • シリアル化可能なすべての [DataContract] 型はパブリックである必要があります。All serializable [DataContract] types must be public.

    • [DataMember] 型にあるシリアル化可能なすべての [DataContract] フィールドまたはプロパティは、パブリックで読み書き可能である必要があります。All serializable [DataMember] fields or properties in a [DataContract] type must be public and read/write. readonly部分的に信頼されたアプリケーションで WCF を実行する場合、フィールドのシリアル化と逆シリアル化はサポートされません。The serialization and deserialization of readonly fields is not supported when running WCF in a partially-trusted application.

    • 部分信頼環境では、 [Serializable]/ISerializable] プログラミング モデルはサポートされていません。The [Serializable]/ISerializable] programming model is not supported in a partial trust environment.

    • 既知の型はコード内、またはマシン レベルの構成 (Machine.config) で指定する必要があります。Known types must be specified in code or machine-level configuration (Machine.config). 既知の型はセキュリティ上の理由からアプリケーション レベルの構成では指定できません。Known types cannot be specified in application-level configuration for security reasons.

  • IObjectReference メソッドにはセキュリティ アクセス許可 GetRealObject が必要であるため、 [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]を実装した型は、部分信頼環境で例外をスローします。Types that implement IObjectReference throw an exception in a partially-trusted environment because the GetRealObject method requires the security permission [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

シリアル化に関するその他のメモAdditional Notes on Serialization

次の規則はデータ コントラクト シリアライザーによってサポートされる型にも適用されます。The following rules also apply to types supported by the Data Contract Serializer:

  • ジェネリック型は、データ コントラクト シリアライザーで完全にサポートされます。Generic types are fully supported by the data contract serializer.

  • Null 許容値型は、データコントラクトシリアライザーによって完全にサポートされます。Nullable value types are fully supported by the data contract serializer.

  • インターフェイス型は Object (コレクション インターフェイスの場合はコレクション型) として扱われます。Interface types are treated either as Object or, in the case of collection interfaces, as collection types.

  • 構造体とクラスの両方がサポートされています。Both structures and classes are supported.

  • は、 DataContractSerializer XmlSerializer および ASP.NET Web サービスで使用されるプログラミングモデルをサポートしていません。The DataContractSerializer does not support the programming model used by the XmlSerializer and ASP.NET Web services. 特に、 XmlElementAttributeXmlAttributeAttributeのような属性をサポートしていません。In particular, it does not support attributes like XmlElementAttribute and XmlAttributeAttribute. このプログラミングモデルのサポートを有効にするには、WCF を、の代わりにを使用するように切り替える必要があり XmlSerializer DataContractSerializer ます。To enable support for this programming model, WCF must be switched to use the XmlSerializer instead of the DataContractSerializer.

  • DBNull 型は、特殊な方法で処理されます。The DBNull type is treated in a special way. これは、シングルトン型です。デシリアライザーは、逆シリアル化後にシングルトン制約に従い、シングルトン インスタンスへのすべての DBNull 参照を指します。It is a singleton type, and upon deserialization the deserializer respects the singleton constraint and points all DBNull references to the singleton instance. DBNull はシリアル化可能な型であるため、 SerializationFormatter アクセス許可が必要です。Because DBNull is a serializable type, it demands SerializationFormatter permission.

関連項目See also