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

Windows Communication Foundation (WCF) では、データを XML に変換し、変換された XML をデータへ戻すための既定のシリアル化エンジンとして、DataContractSerializer が使用されます。 DataContractSerializer は、 データ コントラクト 型をシリアル化するように設計されています。 ただし、暗黙のデータ コントラクトを持つと考えられるその他の型も多数サポートされています。 以下は、シリアル化可能なすべての型です。

部分信頼モードにおける特定の型の使用制限

部分信頼モードのシナリオで型を使用する場合、型によっては次の制限があります。

  • 部分信頼コードで ISerializable を使用して DataContractSerializer を実装する型のシリアル化または逆シリアル化を行うには、 SerializationFormatter アクセス許可および UnmanagedCode アクセス許可が必要です。

  • 部分信頼モードで WCF コードを実行すると、readonly フィールド (publicprivate の両方) のシリアル化と逆シリアル化はサポートされません。 これは、生成された IL が検証不能であるため、より高いアクセス許可が必要になるためです。

  • 部分信頼環境では、 DataContractSerializerXmlSerializer の両方がサポートされています。 ただし、 DataContractSerializer の使用は、次の条件に従う必要があります。

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

    • [DataMember] 型にあるシリアル化可能なすべての [DataContract] フィールドまたはプロパティは、パブリックで読み書き可能である必要があります。 readonly フィールドのシリアル化と逆シリアル化は、WCF を部分信頼アプリケーションで実行する場合にはサポートされません。

    • 部分信頼環境では、 [Serializable]/ISerializable] プログラミング モデルはサポートされていません。

    • 既知の型はコード内、またはマシン レベルの構成 (Machine.config) で指定する必要があります。 既知の型はセキュリティ上の理由からアプリケーション レベルの構成では指定できません。

  • IObjectReference メソッドにはセキュリティ アクセス許可 GetRealObject が必要であるため、 [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]を実装した型は、部分信頼環境で例外をスローします。

シリアル化に関するその他のメモ

次の規則はデータ コントラクト シリアライザーによってサポートされる型にも適用されます。

  • ジェネリック型は、データ コントラクト シリアライザーで完全にサポートされます。

  • null 許容値型は、データ コントラクト シリアライザーで完全にサポートされます。

  • インターフェイス型は Object (コレクション インターフェイスの場合はコレクション型) として扱われます。

  • 構造体とクラスの両方がサポートされています。

  • DataContractSerializer では、XmlSerializer と ASP.NET Web サービスで使用されるプログラミング モデルはサポートされていません。 特に、 XmlElementAttributeXmlAttributeAttributeのような属性をサポートしていません。 このプログラミング モデルのサポートを有効にするには、DataContractSerializer ではなく XmlSerializer を使用するように WCF を切り替える必要があります。

  • DBNull 型は、特殊な方法で処理されます。 これは、シングルトン型です。デシリアライザーは、逆シリアル化後にシングルトン制約に従い、シングルトン インスタンスへのすべての DBNull 参照を指します。 DBNull はシリアル化可能な型であるため、 SerializationFormatter アクセス許可が必要です。

関連項目