この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語
このドキュメントはアーカイブされており、メンテナンスされていません。

DataContractSerializer クラス

ある型のインスタンスを、提供されたデータ コントラクトを使用して、XML ストリームまたはドキュメントにシリアル化または逆シリアル化します。このクラスは継承できません。

System.Object
  System.Runtime.Serialization.XmlObjectSerializer
    System.Runtime.Serialization.DataContractSerializer

名前空間:  System.Runtime.Serialization
アセンブリ:  System.Runtime.Serialization (System.Runtime.Serialization.dll 内)

public sealed class DataContractSerializer : XmlObjectSerializer

DataContractSerializer 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifDataContractSerializer(Type) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifDataContractSerializer(Type, IEnumerable<Type>) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトと、オブジェクト グラフ内に存在可能な既知の型のコレクションをシリアル化または逆シリアル化します。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifDataContractSerializer(Type, String, String) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトを、指定した XML ルート要素と名前空間を使用してシリアル化または逆シリアル化します。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトを、XmlDictionaryString のパラメーターを通して指定した XML ルート要素と名前空間を使用してシリアル化または逆シリアル化します。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifDataContractSerializer(Type, String, String, IEnumerable<Type>) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、XML ルート要素と名前空間を示す 2 つの文字列パラメーターと、オブジェクト グラフ内に存在可能な既知の型のリストを指定します。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、XML ルート要素と名前空間を示す 2 つの XmlDictionaryString パラメーターと、オブジェクト グラフ内に存在可能な既知の型のリストを指定します。
パブリック メソッドDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、オブジェクト グラフ内に存在可能な既知の型のリスト、シリアル化するグラフ項目の最大数、予想外のデータを無視するためのパラメーター、グラフ内のオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうか、およびカスタム シリアル化のためのサロゲートを指定します。
パブリック メソッドDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、オブジェクト グラフ内に存在可能な既知の型のリスト、シリアル化するグラフ項目の最大数、予想外のデータを無視するためのパラメーター、グラフ内のオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうか、カスタム シリアル化のためのサロゲート、および実行時の xsi:type 宣言のマッピングの代替を指定します。
パブリック メソッドDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、オブジェクト グラフ内に存在可能な既知の型のリスト、シリアル化するグラフ項目の最大数、予想外のデータを無視するためのパラメーター、グラフ内のオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうか、カスタム シリアル化のためのサロゲート、およびコンテンツを含む XML 要素と名前空間を指定します。
パブリック メソッドDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、オブジェクト グラフ内に存在可能な既知の型のリスト、シリアル化するグラフ項目の最大数、予想外のデータを無視するためのパラメーター、グラフ内のオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうか、カスタム シリアル化のためのサロゲート、およびコンテンツを含む XML 要素と名前空間を指定する XmlDictionaryString のパラメーターを指定します。
パブリック メソッドDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、オブジェクト グラフ内に存在可能な既知の型のリスト、シリアル化するグラフ項目の最大数、予想外のデータを無視するためのパラメーター、グラフ内のオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうか、カスタム シリアル化のためのサロゲート、コンテンツを含む XML 要素と名前空間、および実行時の xsi:type 宣言のマップの代替を指定します。
パブリック メソッドDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver) DataContractSerializer クラスの新しいインスタンスを初期化し、指定した型のオブジェクトをシリアル化または逆シリアル化します。このメソッドは、さらに、オブジェクト グラフ内に存在可能な既知の型のリスト、シリアル化するグラフ項目の最大数、予想外のデータを無視するためのパラメーター、グラフ内のオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうか、カスタム シリアル化のためのサロゲート、コンテンツを含む XML 要素と名前空間を指定する XmlDictionaryString のパラメーター、および実行時の xsi:type 宣言のマップの代替を指定します。
このページのトップへ

  名前説明
パブリック プロパティDataContractResolver既知のコントラクト型に xsi:type 宣言を動的にマップするのに使用するコンポーネントを取得します。
パブリック プロパティDataContractSurrogateシリアル化または逆シリアル化プロセスを拡張できるサロゲート型を取得します。
パブリック プロパティms405768.PortableClassLibrary(ja-jp,VS.100).gifIgnoreExtensionDataObjectクラスがシリアル化または逆シリアル化されるときに、そのクラスの拡張により提供されるデータを無視するかどうかを指定する値を取得します。
パブリック プロパティms405768.PortableClassLibrary(ja-jp,VS.100).gifKnownTypes DataContractSerializer のこのインスタンスを使用してシリアル化されるオブジェクト グラフ内に存在可能な型のコレクションを取得します。
パブリック プロパティms405768.PortableClassLibrary(ja-jp,VS.100).gifMaxItemsInObjectGraphシリアル化または逆シリアル化するオブジェクト グラフ内の項目の最大数を取得します。
パブリック プロパティms405768.PortableClassLibrary(ja-jp,VS.100).gifPreserveObjectReferencesオブジェクトの参照データを保持するために非標準の XML コンストラクトを使用するかどうかを示す値を取得します。
このページのトップへ

  名前説明
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifEquals(Object)指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifFinalizeオブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifGetHashCode特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifIsStartObject(XmlDictionaryReader)逆シリアル化できるオブジェクトに XmlDictionaryReader が配置されているかどうかを決定します。 (XmlObjectSerializer.IsStartObject(XmlDictionaryReader) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifIsStartObject(XmlReader)逆シリアル化できるオブジェクトに XmlReader が配置されているかどうかを決定します。 (XmlObjectSerializer.IsStartObject(XmlReader) をオーバーライドします。)
プロテクト メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifReadObject(Stream) Stream を使用して XML ストリームまたはドキュメントを読み取り、逆シリアル化されたオブジェクトを返します。 (XmlObjectSerializer から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifReadObject(XmlDictionaryReader) XmlDictionaryReader を使用して XML ドキュメントまたはストリームを読み取り、逆シリアル化されたオブジェクトを返します。 (XmlObjectSerializer から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifReadObject(XmlReader) XmlReader を使用して XML ストリームを読み取り、逆シリアル化されたオブジェクトを返します。 (XmlObjectSerializer.ReadObject(XmlReader) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifReadObject(XmlDictionaryReader, Boolean) XmlDictionaryReader を使用して XML ストリームを読み取り、逆シリアル化されたオブジェクトを返します。さらに、値を読み取る前にオブジェクト名の検証チェックを行うかどうかを指定します。 (XmlObjectSerializer.ReadObject(XmlDictionaryReader, Boolean) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifReadObject(XmlReader, Boolean) XmlReader を使用して XML ストリームを読み取り、逆シリアル化されたオブジェクトを返します。さらに、値を読み取る前にオブジェクト名の検証チェックを行うかどうかを指定します。 (XmlObjectSerializer.ReadObject(XmlReader, Boolean) をオーバーライドします。)
パブリック メソッドReadObject(XmlDictionaryReader, Boolean, DataContractResolver)XML ドキュメントまたはドキュメント ストリームを読み取り、逆シリアル化されたオブジェクトを返します。メソッドには、オブジェクト名を検証するかどうかを指定するパラメータ、および実行時の xsi:type 宣言のマッピングに使用するリゾルバーが含まれます。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifToString現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteEndObject(XmlDictionaryWriter) XmlDictionaryWriter を使用して、XML の終了要素を書き込みます。 (XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteEndObject(XmlWriter) XmlWriter を使用して、XML の終了要素を書き込みます。 (XmlObjectSerializer.WriteEndObject(XmlWriter) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteObject(Stream, Object)指定した Stream を使用して、オブジェクトの完全なコンテンツ (開始、コンテンツ、および終了) を XML ドキュメントまたはストリームに書き込みます。 (XmlObjectSerializer から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteObject(XmlDictionaryWriter, Object)指定した XmlDictionaryWriter を使用して、オブジェクトの完全なコンテンツ (開始、コンテンツ、および終了) を XML ドキュメントまたはストリームに書き込みます。 (XmlObjectSerializer から継承されます。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteObject(XmlWriter, Object) XmlWriter を使用して、すべてのオブジェクト データ (XML の開始要素、コンテンツ、終了要素) を XML ドキュメントまたはストリームに書き込みます。 (XmlObjectSerializer.WriteObject(XmlWriter, Object) をオーバーライドします。)
パブリック メソッドWriteObject(XmlDictionaryWriter, Object, DataContractResolver)指定した XmlDictionaryWriter を使用して、すべてのオブジェクト データ (XML の開始要素、コンテンツ、外側の要素) を XML ドキュメントまたはストリームに書き込みます。メソッドには、実行時の xsi:type 宣言のマッピングに使用するリゾルバーが含まれます。
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteObjectContent(XmlDictionaryWriter, Object) XmlDictionaryWriter を使用して、XML コンテンツを書き込みます。 (XmlObjectSerializer.WriteObjectContent(XmlDictionaryWriter, Object) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteObjectContent(XmlWriter, Object) XmlWriter を使用して、XML コンテンツを書き込みます。 (XmlObjectSerializer.WriteObjectContent(XmlWriter, Object) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteStartObject(XmlDictionaryWriter, Object) XmlDictionaryWriter を使用して、XML の開始要素を書き込みます。 (XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object) をオーバーライドします。)
パブリック メソッドms405768.PortableClassLibrary(ja-jp,VS.100).gifWriteStartObject(XmlWriter, Object) XmlWriter を使用して、XML の開始要素を書き込みます。 (XmlObjectSerializer.WriteStartObject(XmlWriter, Object) をオーバーライドします。)
このページのトップへ

DataContractSerializer クラスを使用して、ある型のインスタンスを XML ストリームまたはドキュメントにシリアル化または逆シリアル化します。たとえば、名前や住所などの必須データを含むプロパティを持つ Person という名前の型を作成できます。その後、Person クラスのインスタンスを作成して操作することで、すべてのプロパティ値を XML ドキュメントに書き込んで後で取得するか、XML ストリームに書き込んで直ちに転送することができます。最も重要な点は、DataContractSerializer は、 メッセージで送信されたデータをシリアル化または逆シリアル化するために使用されることです。 DataContractAttribute 属性をクラスに適用し、DataMemberAttribute 属性をクラス メンバーに適用して、シリアル化するプロパティとフィールドを指定します。

シリアル化可能な型、「Types Supported by the Data Contract Serializer」を参照してください。

DataContractSerializer を使用するには、形式の書き込みと読み取りに適したクラスのインスタンスとオブジェクトを最初に作成します (例 : XmlDictionaryWriter のインスタンス)。その後、WriteObject メソッドを呼び出してデータを保持します。データを取得するには、データ形式の読み取りに適したオブジェクト (XML ドキュメントの場合は XmlDictionaryReader など) を作成し、ReadObject メソッドを呼び出します。

DataContractSerializer の使用方法詳細情報:、「Using Stand-alone Serialization」を参照してください。

クライアント アプリケーション構成ファイルの <dataContractSerializer> 要素を使用して、データ コントラクト シリアライザーの型を設定できます。

シリアル化または逆シリアル化用のクラスの準備

DataContractSerializer は、DataContractAttribute クラスおよび DataMemberAttribute クラスと組み合わせて使用します。シリアル化用のクラスを準備するには、DataContractAttribute をクラスに適用します。シリアル化するデータを返すクラスの各メンバーに対して、DataMemberAttribute を適用します。フィールドとプロパティは、アクセシビリティ (プライベート、保護、内部、内部保護、またはパブリック) に関係なくシリアル化できます。

たとえば、ID プロパティを持つ Customer をスキーマで指定したが、Name プロパティを持つ Person が既存のアプリケーションで既に使用されている場合があります。コントラクトに準拠する型を作成するには、最初に DataContractAttribute をクラスに適用します。その後、シリアル化するすべてのフィールドまたはプロパティに対して DataMemberAttribute を適用します。

メモメモ

DataMemberAttribute は、プライベート メンバーとパブリック メンバーに適用できます。

XML の最終形式は、テキストである必要はありません。 DataContractSerializer では、データは、XmlReaderXmlWriter によって認識される任意の形式にデータを書き込むことができる XML infoset として書き込まれます。 XmlDictionaryReader クラスと XmlDictionaryWriter クラスは、どちらも DataContractSerializer と連携するように最適化されているため、読み取りと書き込みはこれらのクラスを使用して行うことをお勧めします。

シリアル化または逆シリアル化する前に設定する必要があるフィールドまたはプロパティを持つクラスを作成する場合は、「Version Tolerant Serialization Callbacks」の説明に従って、コールバック属性を使用します。

コレクションへの既知の型の追加

オブジェクトをシリアル化または逆シリアル化する場合は、型が DataContractSerializer にとって "既知" である必要があります。 IEnumerable<T> (List<T> など) を実装するクラスのインスタンスを作成し、既知の型をコレクションに追加することから始めます。その後、IEnumerable<T> (DataContractSerializer(Type, IEnumerable<Type>) など) を取るいずれかのオーバーロードを使用して、DataContractSerializer のインスタンスを作成します。

メモメモ

他のプリミティブ型とは異なり、DateTimeOffset 構造は、既定では既知の型ではないため、既知の型のリスト (「Data Contract Known Types」を参照) に手動で追加する必要があります。

上位互換性

DataContractSerializer は、コントラクトの将来のバージョンとの互換性を保つように設計されたデータ コントラクトを理解します。このような型は、IExtensibleDataObject インターフェイスを実装します。このインターフェイスは、ExtensionDataObject オブジェクトを返す ExtensionData プロパティを特徴とします。詳細についてはForward Compatible Data Contracts

部分信頼での実行

逆シリアル化中のターゲット オブジェクトのインスタンス化の際に、DataContractSerializer は、ターゲット オブジェクトのコンストラクターを呼び出しません。部分信頼からアクセスでき (つまり、パブリックであり、AllowPartiallyTrustedCallers 属性が適用されているアセンブリ内にある)、一部のセキュリティ関連の操作を実行する [DataContract] 型を作成する場合は、コンストラクターが呼び出されない点に注意する必要があります。具体的には、以下の手法が機能しません。

  • コンストラクターを内部またはプライベートにする、または LinkDemand をコンストラクターに追加することにより、部分信頼アクセスを制限しようとしても、部分信頼での逆シリアル化中は、いずれも有効にはなりません。

  • コンストラクターが実行していることを前提とするクラスをプログラムすると、クラスが、攻撃に利用できる、無効な内部状態になる可能性があります。

次のコード例は、DataContractSerializer によってシリアル化される Person という名前の型を示しています。 DataContractAttribute 属性がクラスに適用され、シリアル化の対象を DataContractSerializer に指示する DataMemberAttribute がメンバーに適用されます。


namespace DataContractSerializerExample
{
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.Serialization;
    using System.Xml;

    // You must apply a DataContractAttribute or SerializableAttribute
    // to a class to have it serialized by the DataContractSerializer.
    [DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
    class Person : IExtensibleDataObject
    {
        [DataMember()]
        public string FirstName;
        [DataMember]
        public string LastName;
        [DataMember()]
        public int ID;

        public Person(string newfName, string newLName, int newID)
        {
            FirstName = newfName;
            LastName = newLName;
            ID = newID;
        }

        private ExtensionDataObject extensionData_Value;

        public ExtensionDataObject ExtensionData
        {
            get
            {
                return extensionData_Value;
            }
            set
            {
                extensionData_Value = value;
            }
        }
    }

    public sealed class Test
    {
        private Test() { }

        public static void Main()
        {
            try
            {
                WriteObject("DataContractSerializerExample.xml");
                ReadObject("DataContractSerializerExample.xml");

            }

            catch (SerializationException serExc)
            {
                Console.WriteLine("Serialization Failed");
                Console.WriteLine(serExc.Message);
            }
            catch (Exception exc)
            {
                Console.WriteLine(
                "The serialization operation failed: {0} StackTrace: {1}",
                exc.Message, exc.StackTrace);
            }

            finally
            {
                Console.WriteLine("Press <Enter> to exit....");
                Console.ReadLine();
            }
        }

        public static void WriteObject(string fileName)
        {
            Console.WriteLine(
                "Creating a Person object and serializing it.");
            Person p1 = new Person("Zighetti", "Barbara", 101);
            FileStream writer = new FileStream(fileName, FileMode.Create);
            DataContractSerializer ser =
                new DataContractSerializer(typeof(Person));
            ser.WriteObject(writer, p1);
            writer.Close();
        }

        public static void ReadObject(string fileName)
        {
            Console.WriteLine("Deserializing an instance of the object.");
            FileStream fs = new FileStream(fileName,
            FileMode.Open);
            XmlDictionaryReader reader =
                XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
            DataContractSerializer ser = new DataContractSerializer(typeof(Person));

            // Deserialize the data and read it from the instance.
            Person deserializedPerson =
                (Person)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();
            Console.WriteLine(String.Format("{0} {1}, ID: {2}",
            deserializedPerson.FirstName, deserializedPerson.LastName,
            deserializedPerson.ID));
        }
    }


.NET Framework

サポート対象: 4、3.5、3.0

.NET Framework Client Profile

サポート対象: 4、3.5 SP1

サポート対象:

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。 インスタンス メンバーの場合は、スレッド セーフであるとは限りません。
表示: