Windows Communication Foundation (WCF) では、既定のシリアル化エンジンとして DataContractSerializer を使用して、データを XML に変換し、XML をデータに変換します。 DataContractSerializerは、データ コントラクト型をシリアル化するように設計されています。 ただし、他の多くの型がサポートされており、暗黙的なデータ コントラクトがあると考えることができます。 シリアル化できる型の完全な一覧を次に示します。
パラメーターを持たないコンストラクターを持つ、パブリックに表示されるすべての型。
データ コントラクト型。 これらは、 DataContractAttribute 属性が適用されている型です。 ビジネス オブジェクトを表す新しいカスタム型は、通常、データ コントラクト型として作成する必要があります。 詳細については、「データ コントラクトとシリアル化可能な型の使用」を参照してください。
コレクション型。 これらは、データのリストを表す型です。 これらは、型の通常の配列、またはコレクション型 ( ArrayList や Dictionary<TKey,TValue>など) です。 CollectionDataContractAttribute属性は、これらの型のシリアル化をカスタマイズするために使用できますが、必須ではありません。 詳細については、「 データ コントラクトのコレクション型」を参照してください。
列挙型。 フラグ列挙型を含む列挙型はシリアル化可能です。 必要に応じて、列挙型を DataContractAttribute 属性でマークできます。その場合、シリアル化に参加するすべてのメンバーは、 EnumMemberAttribute 属性でマークする必要があります。 マークされていないメンバーはシリアル化されません。 詳細については、「 データ コントラクトの列挙型」を参照してください。
.NET Framework プリミティブ型。 .NET Framework に組み込まれている次の型はすべてシリアル化でき、プリミティブ型と見なされます: Byte、 SByte、 Int16、 Int32、 Int64、 UInt16、 UInt32、 UInt64Single、 Double、 Boolean、 Char、 Decimal、 Object、および String。
その他のプリミティブ型。 これらの型は .NET Framework のプリミティブではありませんが、シリアル化された XML 形式ではプリミティブとして扱われます。 これらの型は、DateTime、DateTimeOffset、TimeSpan、Guid、Uri、XmlQualifiedName、およびByteの配列です。
注
他のプリミティブ型とは異なり、 DateTimeOffset は既定では既知の型ではありません。 詳細については、「 データ コントラクトの既知の型」を参照してください。
SerializableAttribute属性でマークされた型。 .NET Framework 基本クラス ライブラリに含まれる多くの型は、このカテゴリに分類されます。 DataContractSerializerは、.NET Framework リモート処理、BinaryFormatter、およびSoapFormatterで使用されたこのシリアル化プログラミング モデルを完全にサポートしています(ISerializable インターフェイスのサポートを含む)。
生の XML または ADO.NET リレーショナル データを表す型。 XML を直接表現する方法として、XmlElement と XmlNode 型の配列がサポートされています。 さらに、関連するIXmlSerializable属性、XmlSchemaProviderAttribute型、XDocument型など、XElement インターフェイスを実装する型がサポートされています。 ADO.NETDataTable 型と DataSet 型 (および型指定された派生クラス) はすべて、 IXmlSerializable インターフェイスを実装するため、このカテゴリに適合します。 詳細については、「 データ コントラクトの XML 型と ADO.NET 型」を参照してください。
部分信頼モードで特定の種類を使用する場合の制限事項
部分信頼モードのシナリオで特定の種類を使用する場合の制限の一覧を次に示します。
ISerializableを使用して部分的に信頼されたコードでDataContractSerializerを実装する型をシリアル化または逆シリアル化するには、SerializationFormatterとUnmanagedCodeのアクセス許可が必要です。
部分信頼モードで WCF コードを実行する場合、
readonly
フィールド (public
とprivate
の両方) のシリアル化と逆シリアル化はサポートされません。 これは、生成された IL が検証できないため、昇格されたアクセス許可が必要であるためです。部分信頼環境では、 DataContractSerializer と XmlSerializer の両方がサポートされます。 ただし、 DataContractSerializer の使用には、次の条件が適用されます。
シリアル化可能なすべての
[DataContract]
型はパブリックである必要があります。[DataMember]
型のすべてのシリアル化可能な[DataContract]
フィールドまたはプロパティは、パブリックおよび読み取り/書き込みである必要があります。 部分的に信頼されたアプリケーションで WCF を実行する場合、readonly
フィールドのシリアル化と逆シリアル化はサポートされません。[Serializable]
/ISerializable]
プログラミング モデルは、部分信頼環境ではサポートされていません。既知の型は、コードまたはマシン レベルの構成 (
Machine.config
) で指定する必要があります。 セキュリティ上の理由から、アプリケーション レベルの構成では既知の型を指定できません。
IObjectReference を実装する型は、部分的に信頼された環境で例外をスローします。これは、GetRealObject メソッドがセキュリティアクセス許可
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
を必要とするためです。
シリアル化に関するその他の注意事項
次の規則は、データ コントラクト シリアライザーでサポートされる型にも適用されます。
ジェネリック型は、データ コントラクト シリアライザーによって完全にサポートされます。
null 許容値型は、データ コントラクト シリアライザーで完全にサポートされます。
インターフェイス型は、 Object として、またはコレクション インターフェイスの場合はコレクション型として扱われます。
構造体とクラスの両方がサポートされています。
DataContractSerializerでは、XmlSerializerおよび ASP.NET Web サービスで使用されるプログラミング モデルはサポートされていません。 特に、 XmlElementAttribute や XmlAttributeAttributeなどの属性はサポートされていません。 このプログラミング モデルのサポートを有効にするには、ではなくを使用するように WCF を切り替える必要があります。
DBNull型は特別な方法で処理されます。 これはシングルトン型であり、逆シリアル化時にデシリアライザーはシングルトン制約を尊重し、すべての
DBNull
参照をシングルトン インスタンスにポイントします。DBNull
はシリアル化可能な型であるため、SerializationFormatterアクセス許可が必要です。