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

XmlSerializer クラス

 

公開日: 2016年10月

オブジェクトから XML ドキュメントへのシリアル化および XML ドキュメントからオブジェクトへの逆シリアル化を実行します。 XmlSerializer オブジェクトを XML にエンコードする方法を制御することができます。

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

System.Object
  System.Xml.Serialization.XmlSerializer

public class XmlSerializer

名前説明
System_CAPS_protmethodXmlSerializer()

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 XmlSerializer クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodXmlSerializer(Type)

新しいインスタンスを初期化、 XmlSerializer を指定した型のオブジェクトに XML を逆シリアル化および XML ドキュメントに指定した型のオブジェクトをシリアル化できるクラスについて説明します。

System_CAPS_pubmethodXmlSerializer(Type, String)

新しいインスタンスを初期化、 XmlSerializer を指定した型のオブジェクトに XML を逆シリアル化および XML ドキュメントに指定した型のオブジェクトをシリアル化できるクラスについて説明します。 すべての XML 要素の既定の名前空間を指定します。

System_CAPS_pubmethodXmlSerializer(Type, Type[])

新しいインスタンスを初期化、 XmlSerializer を指定した型のオブジェクトに XML を逆シリアル化および XML ドキュメントに指定した型のオブジェクトをシリアル化できるクラスについて説明します。 プロパティまたはフィールドには、配列が返された場合、 extraTypes パラメーター配列に挿入できるオブジェクトを指定します。

System_CAPS_pubmethodXmlSerializer(Type, XmlAttributeOverrides)

新しいインスタンスを初期化、 XmlSerializer を指定した型のオブジェクトに XML を逆シリアル化および XML ドキュメントに指定した型のオブジェクトをシリアル化できるクラスについて説明します。 各オブジェクト シリアル化することができます自体インスタンスを含むクラスは、このオーバー ロードは、他のクラスでオーバーライドできます。

System_CAPS_pubmethodXmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String)

新しいインスタンスを初期化、 XmlSerializer 型のオブジェクトをシリアル化できるクラス Object を XML ドキュメント インスタンス、型のオブジェクトに XML ドキュメントのインスタンスをシリアル化および Objectです。 それぞれのオブジェクトをシリアル化を含めることができます自体のこのオーバー ロードは、他のクラスをオーバーライドするクラスのインスタンス。 このオーバー ロードでは、すべての XML 要素および XML ルート要素として使用するクラスの既定の名前空間も指定します。

System_CAPS_pubmethodXmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String)

新しいインスタンスを初期化、 XmlSerializer 型のオブジェクトをシリアル化できるクラス Object を XML ドキュメント インスタンス、型のオブジェクトに XML ドキュメントのインスタンスをシリアル化および Objectです。 それぞれのオブジェクトをシリアル化を含めることができます自体のこのオーバー ロードは、他のクラスをオーバーライドするクラスのインスタンス。 このオーバー ロードでは、すべての XML 要素および XML ルート要素として使用するクラスの既定の名前空間も指定します。

System_CAPS_pubmethodXmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String, Evidence)

互換性のために残されています。 この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 新しいインスタンスを初期化、 XmlSerializer XML ドキュメントのインスタンスを指定した型のオブジェクトに逆シリアル化および XML ドキュメントのインスタンスに指定した型のオブジェクトをシリアル化できるクラスです。 このオーバー ロードでは、既定の名前空間のすべての XML 要素の XML ルート要素、その場所、およびアクセスに必要な資格情報として使用するクラスと同様にシリアル化または逆シリアル化の操作中に検出可能な他の種類を指定することができます。

System_CAPS_pubmethodXmlSerializer(Type, XmlRootAttribute)

新しいインスタンスを初期化、 XmlSerializer 指定した型のオブジェクトに XML ドキュメントを逆シリアル化および XML ドキュメントに指定した型のオブジェクトをシリアル化できるクラスです。 また、XML ルート要素として使用するクラスを指定します。

System_CAPS_pubmethodXmlSerializer(XmlTypeMapping)

インスタンスを初期化、 XmlSerializer クラスの別の 1 つの型をマップするオブジェクトを使用します。

名前説明
System_CAPS_pubmethodCanDeserialize(XmlReader)

示す値を取得するかどうかこの XmlSerializer 指定された XML ドキュメントを逆シリアル化します。

System_CAPS_protmethodCreateReader()

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 シリアル化する XML ドキュメントの読み取りに使用するオブジェクトを返します。

System_CAPS_protmethodCreateWriter()

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 派生クラスでオーバーライドされた場合は、オブジェクトをシリアル化に使用するライターを返します。

System_CAPS_pubmethodDeserialize(Stream)

指定した格納されている XML ドキュメントを逆シリアル化 Streamします。

System_CAPS_pubmethodDeserialize(TextReader)

指定した格納されている XML ドキュメントを逆シリアル化 TextReaderします。

System_CAPS_pubmethodDeserialize(XmlReader)

指定した格納されている XML ドキュメントを逆シリアル化 XmlReaderします。

System_CAPS_pubmethodDeserialize(XmlReader, String)

指定した格納されている XML ドキュメントを逆シリアル化 XmlReader とスタイルをエンコードします。

System_CAPS_pubmethodDeserialize(XmlReader, String, XmlDeserializationEvents)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 指定したに含まれるデータを使用してオブジェクトを逆シリアル化 XmlReaderします。

System_CAPS_pubmethodDeserialize(XmlReader, XmlDeserializationEvents)

指定した格納されている XML ドキュメントを逆シリアル化 XmlReader し、逆シリアル化中に発生するイベントのオーバーライドできるようにします。

System_CAPS_protmethodDeserialize(XmlSerializationReader)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 指定した格納されている XML ドキュメントを逆シリアル化 XmlSerializationReaderします。

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodSystem_CAPS_staticFromMappings(XmlMapping[])

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 配列を返す XmlSerializer オブジェクトの配列から作成された XmlTypeMapping オブジェクトです。

System_CAPS_pubmethodSystem_CAPS_staticFromMappings(XmlMapping[], Evidence)

互換性のために残されています。インスタンスを返す、 XmlSerializer クラスの 1 つの XML 型のマッピングを作成します。

System_CAPS_pubmethodSystem_CAPS_staticFromMappings(XmlMapping[], Type)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 インスタンスを返す、 XmlSerializer クラスの指定したマッピング。

System_CAPS_pubmethodSystem_CAPS_staticFromTypes(Type[])

配列を返します XmlSerializer 型の配列から作成されたオブジェクト。

System_CAPS_pubmethodSystem_CAPS_staticGenerateSerializer(Type[], XmlMapping[])

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 指定したマッピングを使用して、指定された型をシリアル化または逆シリアル化するために使用するカスタムのシリアライザーを含むアセンブリを返します。

System_CAPS_pubmethodSystem_CAPS_staticGenerateSerializer(Type[], XmlMapping[], CompilerParameters)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 指定された対応付けとコンパイラの詳細設定オプションを使用して、指定された型をシリアル化または逆シリアル化するために使用するカスタムのシリアライザーを含むアセンブリを返します。

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodSystem_CAPS_staticGetXmlSerializerAssemblyName(Type)

1 つまたは複数のバージョンを含むアセンブリの名前を取得、 XmlSerializer 特に作成された、指定した型を逆シリアル化または逆シリアル化します。

System_CAPS_pubmethodSystem_CAPS_staticGetXmlSerializerAssemblyName(Type, String)

指定された名前空間の指定した型のシリアライザーを格納するアセンブリの名前を返します。

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_protmethodSerialize(Object, XmlSerializationWriter)

この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます XmlSerializationWriterします。

System_CAPS_pubmethodSerialize(Stream, Object)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます Streamします。

System_CAPS_pubmethodSerialize(Stream, Object, XmlSerializerNamespaces)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます Stream指定した名前空間を参照します。

System_CAPS_pubmethodSerialize(TextWriter, Object)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます TextWriterします。

System_CAPS_pubmethodSerialize(TextWriter, Object, XmlSerializerNamespaces)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます TextWriter し、指定した名前空間を参照します。

System_CAPS_pubmethodSerialize(XmlWriter, Object)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます XmlWriterします。

System_CAPS_pubmethodSerialize(XmlWriter, Object, XmlSerializerNamespaces)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます XmlWriter し、指定した名前空間を参照します。

System_CAPS_pubmethodSerialize(XmlWriter, Object, XmlSerializerNamespaces, String)

指定したオブジェクトをシリアル化し、XML ドキュメントを指定してファイルに書き込みます XmlWriter し、指定した名前空間とエンコード スタイルを参照します。

System_CAPS_pubmethodSerialize(XmlWriter, Object, XmlSerializerNamespaces, String, String)

指定したシリアル化 Object し、XML ドキュメントを指定してファイルに書き込みます XmlWriter, 、XML 名前空間とエンコードされます。

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

名前説明
System_CAPS_pubeventUnknownAttribute

発生したときに、 XmlSerializer 逆シリアル化中に不明な種類の XML 属性が発生します。

System_CAPS_pubeventUnknownElement

発生したときに、 XmlSerializer 逆シリアル化中に不明な型の XML 要素が発生します。

System_CAPS_pubeventUnknownNode

発生したときに、 XmlSerializer 逆シリアル化中に不明な型の XML ノードを検出しました。

System_CAPS_pubeventUnreferencedObject

SOAP エンコード済み XML ストリームのシリアル化解除中に発生したときに、 XmlSerializer で認識される型が使用されていないか、参照されていないが発生しました。

XML シリアル化とは、オブジェクトのパブリック プロパティとパブリック フィールドを格納したり伝送できるようにシリアル形式 (この場合は XML) に変換する処理のことです。 逆シリアル化は、XML 出力から元の状態でオブジェクトを再作成します。 シリアル化ストリームまたはバッファーにオブジェクトの状態を保存する方法として考えることができます。 たとえば、ASP.NET を使用して、 XmlSerializer XML Web サービス メッセージをエンコードするクラス。

オブジェクトのデータは、クラス、フィールド、プロパティ、プリミティブ型、配列などのプログラミング構成要素、および XmlElement オブジェクトまたは XmlAttribute オブジェクトの形で埋め込まれている XML を使用して記述されます。 使用して属性を持つ注釈が付けられた独自のクラスを作成するオプションがある、 XML スキーマ定義ツール (Xsd.exe) 既存の XML スキーマ定義 (XSD) ドキュメントに基づくクラスを生成します。 XML スキーマがある場合は、厳密スキーマに型およびシリアル化する場合、スキーマに準拠する属性で注釈されるクラスのセットを生成する Xsd.exe を実行することができます。

オブジェクトと XML 間でデータを転送するには、XML スキーマにプログラミング言語構成要素とプログラミング言語構成要素の XML スキーマからのマッピングが必要です。 XmlSerializer Xsd.exe のような関連ツールは、両方のデザイン時にこれら 2 つのテクノロジとランタイム間のブリッジを提供します。 デザイン時に、カスタム クラスから XML スキーマ ドキュメント (.xsd) を生成するか、特定のスキーマからクラスを生成する Xsd.exe を使用します。 いずれの場合、クラスに指示するカスタム属性で注釈は、 XmlSerializer XML スキーマのシステムと共通言語ランタイムの間にマップする方法です。 実行時に、クラスのインスタンスを指定したスキーマに従っている XML ドキュメントにシリアル化できます。 同様に、これらの XML ドキュメントの場合は、ランタイム オブジェクトに逆シリアル化できます。 デザイン時または実行時に、オプションであり、必須ではないに XML スキーマことに注意してください。

生成された XML を制御するには、クラスとメンバーに特別な属性を適用できます。 たとえば、さまざまな XML 要素名を指定する次のように適用します。、 XmlElementAttribute パブリック フィールドまたはプロパティ、およびセットに、 ElementName プロパティです。 類似する属性の一覧については、次を参照してください。 XML シリアル化を制御する属性します。 実装することも、 IXmlSerializable XML 出力を制御するインターフェイスです。

生成された XML は、ワールド ワイド Consortium) (www.w3.org) のドキュメントのセクション 5 に準拠する必要があります、"Simple Object Access Protocol (SOAP) 1.1"をする必要がありますを作成する、 XmlSerializer で、 XmlTypeMappingです。 コントロールでエンコードされた SOAP XML を強化するために示されている属性を使用して エンコード済み SOAP シリアル化を制御する属性します。

XmlSerializer 厳密に型指定のクラスの使用を活用し、XML の柔軟性がまだあることができます。 型のフィールドまたはプロパティを使用して XmlElement, 、XmlAttribute または XmlNode 、厳密に型指定のクラスには、XML オブジェクトに直接 XML ドキュメントの部分を読み取ることができます。

拡張可能な XML スキーマを使用する場合は、使用することも、 XmlAnyElementAttributeXmlAnyAttributeAttribute 属性および要素または属性の元のスキーマが見つからない場合に逆シリアル化します。 オブジェクトを使用するのには、適用、 XmlAnyElementAttribute の配列を返すフィールドに XmlElement オブジェクト、または適用、 XmlAnyAttributeAttribute の配列を返すフィールドに XmlAttribute オブジェクトです。

プロパティやフィールドが複雑なオブジェクト (配列やクラス インスタンスなど) を返す場合、XmlSerializer は、そのオブジェクトを、メイン XML ドキュメント内で入れ子になっている要素に変換します。 たとえば、次のコードの最初のクラスは、2 番目のクラスのインスタンスを返します。

public class MyClass
{
    public MyObject MyObjectProperty;
}
public class MyObject
{
    public string ObjectName;
}

シリアル化される XML 出力は次の次のようにします。

<MyClass>
  <MyObjectProperty>
  <ObjectName>My String</ObjectName>
  </MyObjectProperty>
</MyClass>

スキーマには、省略可能な要素が含まれている場合 (minOccurs = '0')、または 2 つのオプションが、スキーマには、既定値が含まれている場合。 1 つのオプションは、使用する System.ComponentModel.DefaultValueAttribute を次のコードに示すように、既定値を指定します。

public class PurchaseOrder
{
    [System.ComponentModel.DefaultValueAttribute ("2002")]
    public string Year;
}

によって認識されるブール型フィールドを作成するには特殊なパターンを使用することもできます、 XmlSerializer, 、適用して、 XmlIgnoreAttribute フィールドにします。 パターンは、の形式で作成 propertyNameSpecifiedします。 たとえば、指示かどうかは、"MyFirstNameSpecified"という名前のフィールドを作成することも、"MyFirstName"という名前のフィールドを XmlSerializer "MyFirstName"という名前の XML 要素を生成するかどうか。 これを次の例に示します。

public class OptionalOrder
{
    // This field should not be serialized 
    // if it is uninitialized.
    public string FirstOrder;

    // Use the XmlIgnoreAttribute to ignore the 
    // special field named "FirstOrderSpecified".
    [System.Xml.Serialization.XmlIgnoreAttribute]
    public bool FirstOrderSpecified;
}

適切な属性のいずれかを作成してのインスタンスに追加のオブジェクトと、フィールドおよびプロパティのセットのシリアル化をオーバーライドすることも、 XmlAttributes クラスです。 2 つの用途を持つこの方法でシリアル化をオーバーライドします最初に、制御し、ソースにアクセスできない場合でも、DLL 内で見つかったオブジェクトのシリアル化の強化。次に、シリアル化可能なクラスの 1 つのセットを作成するが、複数の方法でオブジェクトをシリアル化します。 詳細については、次を参照してください。、 XmlAttributeOverrides クラスと 方法 : 派生クラスのシリアル化を制御するです。

オブジェクトをシリアル化を呼び出す、 Serialize メソッドです。 オブジェクトを逆シリアル化を呼び出し、 Deserialize メソッドです。

XML ドキュメントに XML 名前空間を追加するを参照してください。 XmlSerializerNamespacesします。

System_CAPS_noteメモ

XmlSerializer 特別な処理を実装するクラスは、 IEnumerable または ICollectionです。 IEnumerable を実装するクラスは、単一のパラメーターを受け取るパブリックな Add メソッドを実装している必要があります。 Add から返されると、同じ型のメソッドのパラメーターがある必要があります、 Current プロパティから返される値を GetEnumerator, 、またはその型の基本のいずれかです。 実装するクラス ICollection (など CollectionBase) に加え IEnumerable パブリック Item インデックス付きプロパティ (c# のインデクサー) を整数を受け取るし、公開が必要 Count 整数型のプロパティです。 パラメーターを Add メソッドから返されると同じ型である必要があります、 Item プロパティ、またはその型の基本のいずれかです。 クラスを実装する ICollection, 、シリアル化する値を取得、インデックス付きから Item プロパティを呼び出すことではなく GetEnumeratorです。

オブジェクトを逆シリアル化する (ように、TEMP 環境変数によって定義される) を一時ディレクトリに書き込むアクセス許可が必要です。

パフォーマンスを向上させるには、XML シリアル化インフラストラクチャでは、指定された型を逆シリアル化およびシリアル化するアセンブリが動的に生成されます。 インフラストラクチャは、検索し、それらのアセンブリを再利用します。 この動作は、次のコンス トラクターを使用する場合にのみ発生します。

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

他のコンス トラクターを使用する場合、同じアセンブリの複数のバージョンが生成され、その結果、メモリ リークが発生し、パフォーマンスの低下にアンロードされません。 最も簡単なソリューションでは、前に説明した 2 つのコンス トラクターのいずれかを使用します。 それ以外の場合、内のアセンブリをキャッシュする必要があります、 Hashtable, の次の例に示すようにします。

Hashtable serializers = new Hashtable();

// Use the constructor that takes a type and XmlRootAttribute.
XmlSerializer s = new XmlSerializer(typeof(MyClass), myRoot);

// Implement a method named GenerateKey that creates unique keys 
// for each instance of the XmlSerializer. The code should take 
// into account all parameters passed to the XmlSerializer 
// constructor.
object key = GenerateKey(typeof(MyClass), myRoot);

// Check the local cache for a matching serializer.
XmlSerializer ser = (XmlSerializer)serializers[key];
if (ser == null) 
{
    ser = new XmlSerializer(typeof(MyClass), myRoot);
    // Cache the serializer.
    serializers[key] = ser;
}
else
{
    // Use the serializer to serialize, or deserialize.
}

XmlSerializer 次を逆シリアル化または逆シリアル化できません。

XmlSerializer を次の条件に該当する場合は、列挙型をシリアル化するインスタンス化することはできません: 符号なしの long 型の列挙体は、(ulong C# の場合)、列挙体には、9,223,372,036,854,775,807 より大きい値を持つメンバーが含まれています。 たとえば、次のシリアル化できません。

public enum LargeNumbers: ulong
{
    a = 9223372036854775808
}
// At runtime, the following code will fail.
xmlSerializer mySerializer=new XmlSerializer(typeof(LargeNumbers));

.NET Framework 3.5 、 XmlSerializer クラスが不要になったとしてマークされているオブジェクトをシリアル化 [Obsolete]します。

次の例には、2 つの主要なクラスが含まれています: PurchaseOrderTestです。 PurchaseOrder クラスには、1 つの購入に関する情報が含まれています。 Test クラスには、発注書を作成して、作成された発注書を読み取るメソッドが含まれています。

using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

/* The XmlRootAttribute allows you to set an alternate name 
   (PurchaseOrder) of the XML element, the element namespace; by 
   default, the XmlSerializer uses the class name. The attribute 
   also allows you to set the XML namespace for the element.  Lastly,
   the attribute sets the IsNullable property, which specifies whether 
   the xsi:null attribute appears if the class instance is set to 
   a null reference. */
[XmlRootAttribute("PurchaseOrder", Namespace="http://www.cpandl.com", 
IsNullable = false)]
public class PurchaseOrder
{
   public Address ShipTo;
   public string OrderDate; 
   /* The XmlArrayAttribute changes the XML element name
    from the default of "OrderedItems" to "Items". */
   [XmlArrayAttribute("Items")]
   public OrderedItem[] OrderedItems;
   public decimal SubTotal;
   public decimal ShipCost;
   public decimal TotalCost;   
}

public class Address
{
   /* The XmlAttribute instructs the XmlSerializer to serialize the Name
      field as an XML attribute instead of an XML element (the default
      behavior). */
   [XmlAttribute]
   public string Name;
   public string Line1;

   /* Setting the IsNullable property to false instructs the 
      XmlSerializer that the XML attribute will not appear if 
      the City field is set to a null reference. */
   [XmlElementAttribute(IsNullable = false)]
   public string City;
   public string State;
   public string Zip;
}

public class OrderedItem
{
   public string ItemName;
   public string Description;
   public decimal UnitPrice;
   public int Quantity;
   public decimal LineTotal;

   /* Calculate is a custom method that calculates the price per item,
      and stores the value in a field. */
   public void Calculate()
   {
      LineTotal = UnitPrice * Quantity;
   }
}

public class Test
{
   public static void Main()
   {
      // Read and write purchase orders.
      Test t = new Test();
      t.CreatePO("po.xml");
      t.ReadPO("po.xml");
   }

   private void CreatePO(string filename)
   {
      // Create an instance of the XmlSerializer class;
      // specify the type of object to serialize.
      XmlSerializer serializer = 
      new XmlSerializer(typeof(PurchaseOrder));
      TextWriter writer = new StreamWriter(filename);
      PurchaseOrder po=new PurchaseOrder();

      // Create an address to ship and bill to.
      Address billAddress = new Address();
      billAddress.Name = "Teresa Atkinson";
      billAddress.Line1 = "1 Main St.";
      billAddress.City = "AnyTown";
      billAddress.State = "WA";
      billAddress.Zip = "00000";
      // Set ShipTo and BillTo to the same addressee.
      po.ShipTo = billAddress;
      po.OrderDate = System.DateTime.Now.ToLongDateString();

      // Create an OrderedItem object.
      OrderedItem i1 = new OrderedItem();
      i1.ItemName = "Widget S";
      i1.Description = "Small widget";
      i1.UnitPrice = (decimal) 5.23;
      i1.Quantity = 3;
      i1.Calculate();

      // Insert the item into the array.
      OrderedItem [] items = {i1};
      po.OrderedItems = items;
      // Calculate the total cost.
      decimal subTotal = new decimal();
      foreach(OrderedItem oi in items)
      {
         subTotal += oi.LineTotal;
      }
      po.SubTotal = subTotal;
      po.ShipCost = (decimal) 12.51; 
      po.TotalCost = po.SubTotal + po.ShipCost; 
      // Serialize the purchase order, and close the TextWriter.
      serializer.Serialize(writer, po);
      writer.Close();
   }

   protected void ReadPO(string filename)
   {
      // Create an instance of the XmlSerializer class;
      // specify the type of object to be deserialized.
      XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
      /* If the XML document has been altered with unknown 
      nodes or attributes, handle them with the 
      UnknownNode and UnknownAttribute events.*/
      serializer.UnknownNode+= new 
      XmlNodeEventHandler(serializer_UnknownNode);
      serializer.UnknownAttribute+= new 
      XmlAttributeEventHandler(serializer_UnknownAttribute);

      // A FileStream is needed to read the XML document.
      FileStream fs = new FileStream(filename, FileMode.Open);
      // Declare an object variable of the type to be deserialized.
      PurchaseOrder po;
      /* Use the Deserialize method to restore the object's state with
      data from the XML document. */
      po = (PurchaseOrder) serializer.Deserialize(fs);
      // Read the order date.
      Console.WriteLine ("OrderDate: " + po.OrderDate);

      // Read the shipping address.
      Address shipTo = po.ShipTo;
      ReadAddress(shipTo, "Ship To:");
      // Read the list of ordered items.
      OrderedItem [] items = po.OrderedItems;
      Console.WriteLine("Items to be shipped:");
      foreach(OrderedItem oi in items)
      {
         Console.WriteLine("\t"+
         oi.ItemName + "\t" + 
         oi.Description + "\t" +
         oi.UnitPrice + "\t" +
         oi.Quantity + "\t" +
         oi.LineTotal);
      }
      // Read the subtotal, shipping cost, and total cost.
      Console.WriteLine("\t\t\t\t\t Subtotal\t" + po.SubTotal);
      Console.WriteLine("\t\t\t\t\t Shipping\t" + po.ShipCost); 
      Console.WriteLine("\t\t\t\t\t Total\t\t" + po.TotalCost);
   }

   protected void ReadAddress(Address a, string label)
   {
      // Read the fields of the Address object.
      Console.WriteLine(label);
      Console.WriteLine("\t"+ a.Name );
      Console.WriteLine("\t" + a.Line1);
      Console.WriteLine("\t" + a.City);
      Console.WriteLine("\t" + a.State);
      Console.WriteLine("\t" + a.Zip );
      Console.WriteLine();
   }

   private void serializer_UnknownNode
   (object sender, XmlNodeEventArgs e)
   {
      Console.WriteLine("Unknown Node:" +   e.Name + "\t" + e.Text);
   }

   private void serializer_UnknownAttribute
   (object sender, XmlAttributeEventArgs e)
   {
      System.Xml.XmlAttribute attr = e.Attr;
      Console.WriteLine("Unknown attribute " + 
      attr.Name + "='" + attr.Value + "'");
   }
}

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

この型はスレッド セーフです。

トップに戻る
表示: