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

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

  • パラメーターを持たないコンストラクターを持つ公開されている型すべて

  • データ コントラクト型。DataContractAttribute 属性が適用される型です。ビジネス オブジェクトを表す新しいカスタム型は、通常、データ コントラクト型として作成されます。詳細については、次のトピックを参照してください。、「データ コントラクトの使用」および「シリアル化可能な型」を参照してください。

  • コレクション型。データのリストを表す型です。型の通常の配列、または ArrayListDictionary などのコレクション型です。CollectionDataContractAttribute 属性を使用してこれらの型のシリアル化をカスタマイズすることもできますが、必須ではありません。詳細については、次のトピックを参照してください。、「データ コントラクトのコレクション型」を参照してください。

  • 列挙型。フラグ列挙体などの列挙体はシリアル化できます。列挙型は、必要に応じて、DataContractAttribute 属性でマークできます。その場合は、シリアル化に参加するすべてのメンバーを EnumMemberAttribute 属性でマークする必要があります。マークされていないメンバーはシリアル化されません。詳細については、次のトピックを参照してください。、「データ コントラクトの列挙型」を参照してください。

  • .NET Framework プリミティブ型。.NET Framework に組み込まれている型 (ByteSByteInt16Int32Int64UInt16UInt32UInt64SingleDoubleBooleanCharDecimalObject、および String) は、すべてシリアル化可能であり、プリミティブ型であると考えられます。

  • その他のプリミティブ型。これらの型は .NET Framework のプリミティブではないが、シリアル化された XML 形式ではプリミティブとして扱われます。この型には、DateTimeDateTimeOffsetTimeSpanGuidUriXmlQualifiedName、および Byte の配列が含まれます。

    ms731923.note(ja-jp,VS.100).gif注 :
    他のプリミティブ型とは異なり、DateTimeOffset は既定では既知の型ではありません。詳細については、次のトピックを参照してください。、「既知のデータ コントラクト型」を参照してください。

  • SerializableAttribute 属性でマークされた型。.NET Framework 基本クラス ライブラリに含まれる多くの型は、このカテゴリに分類されます。DataContractSerializer は、.NET Framework リモート処理、BinaryFormatter、および SoapFormatter で使用されていたこのシリアル化プログラミング モデルを完全にサポートします。これは、ISerializable インターフェイスのサポートを含みます。

  • 未処理の XML を表す型、または ADO.NET のリレーショナル データを表す型。XmlElement 型および XmlNode 型の配列は、XML を直接表す方法としてサポートされています。また、IXmlSerializable インターフェイスを実装する型 (関連する XmlSchemaProviderAttribute 属性、および XDocument 型と XElement 型を含む) もサポートされています。ADO.NET の DataTable 型と DataSet 型 (およびその型指定された派生クラス) はすべて IXmlSerializable インターフェイスを実装するので、このカテゴリに属します。詳細については、次のトピックを参照してください。、「データ コントラクトの XML および ADO.NET の種類」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参照

概念

データ コントラクトの XML および ADO.NET の種類
データ コントラクトの使用
シリアル化可能な型
データ コントラクトのコレクション型
データ コントラクトの列挙型