次の方法で共有


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

Windows Communication Foundation (WCF) では、既定のシリアル化エンジンとして DataContractSerializer を使用して、データを XML に変換し、XML をデータに変換します。 DataContractSerializerは、データ コントラクト型をシリアル化するように設計されています。 ただし、他の多くの型がサポートされており、暗黙的なデータ コントラクトがあると考えることができます。 シリアル化できる型の完全な一覧を次に示します。

部分信頼モードで特定の種類を使用する場合の制限事項

部分信頼モードのシナリオで特定の種類を使用する場合の制限の一覧を次に示します。

  • ISerializableを使用して部分的に信頼されたコードでDataContractSerializerを実装する型をシリアル化または逆シリアル化するには、SerializationFormatterUnmanagedCodeのアクセス許可が必要です。

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

  • 部分信頼環境では、 DataContractSerializerXmlSerializer の両方がサポートされます。 ただし、 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 サービスで使用されるプログラミング モデルはサポートされていません。 特に、 XmlElementAttributeXmlAttributeAttributeなどの属性はサポートされていません。 このプログラミング モデルのサポートを有効にするには、ではなくを使用するように WCF を切り替える必要があります。

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

こちらも参照ください