英語で読む

次の方法で共有


XmlSerializer クラス

定義

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

C#
public class XmlSerializer
継承
XmlSerializer

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

C#
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 + "'");
   }
}

注釈

この API の詳細については、「 XmlSerializer の補足 API 解説」を参照してください。

コンストラクター

XmlSerializer()

XmlSerializer クラスの新しいインスタンスを初期化します。

XmlSerializer(Type)

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

XmlSerializer(Type, String)

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

XmlSerializer(Type, Type[])

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

XmlSerializer(Type, XmlAttributeOverrides)

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

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

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

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

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

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String, Evidence)
古い.

指定した型のオブジェクトを XML ドキュメント インスタンスにシリアル化したり、XML ドキュメント インスタンスを指定した型のオブジェクトに逆シリアル化したりできる、XmlSerializer クラスの新しいインスタンスを初期化します。 このオーバーロードでは、シリアル化操作または逆シリアル化操作で見つかる可能性がある他の型、すべての XML 要素の既定の名前空間、XML ルート要素として使用されるクラスとその場所、およびアクセスで要求される資格情報を提供できます。

XmlSerializer(Type, XmlRootAttribute)

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

XmlSerializer(XmlTypeMapping)

ある型を別の型にマップするオブジェクトを指定して、XmlSerializer クラスのインスタンスを初期化します。

メソッド

CanDeserialize(XmlReader)

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

CreateReader()

シリアル化される XML ドキュメントを読み取るために使用されるオブジェクトを返します。

CreateWriter()

派生クラスでオーバーライドされた場合、オブジェクトのシリアル化に使用されるライターを返します。

Deserialize(Stream)

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

Deserialize(TextReader)

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

Deserialize(XmlReader)

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

Deserialize(XmlReader, String)

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

Deserialize(XmlReader, String, XmlDeserializationEvents)

指定した XmlReader に格納されているデータを使用してオブジェクトを逆シリアル化します。

Deserialize(XmlReader, XmlDeserializationEvents)

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

Deserialize(XmlSerializationReader)

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

Equals(Object)

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

(継承元 Object)
FromMappings(XmlMapping[])

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

FromMappings(XmlMapping[], Evidence)
古い.

XML 型から別の型への割り当てから作成された XmlSerializer クラスのインスタンスを返します。

FromMappings(XmlMapping[], Type)

指定したマッピングから XmlSerializer クラスのインスタンスを返します。

FromTypes(Type[])

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

GenerateSerializer(Type[], XmlMapping[])

指定した割り当てを使用して、指定した型をシリアル化または逆シリアル化するために使用される、カスタム シリアライザーを格納しているアセンブリを返します。

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

指定した割り当てとコンパイラの設定およびオプションを使用して、指定した型をシリアル化または逆シリアル化するために使用される、カスタム シリアライザーを格納しているアセンブリを返します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
GetXmlSerializerAssemblyName(Type)

指定した型のシリアル化または逆シリアル化のために特に作成された、1 つ以上のバージョンの XmlSerializer を格納しているアセンブリの名前を返します。

GetXmlSerializerAssemblyName(Type, String)

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

MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
Serialize(Object, XmlSerializationWriter)

指定した Object をシリアル化し、生成された XML ドキュメントを、指定した XmlSerializationWriter を使用してファイルに書き込みます。

Serialize(Stream, Object)

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

Serialize(Stream, Object, XmlSerializerNamespaces)

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

Serialize(TextWriter, Object)

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

Serialize(TextWriter, Object, XmlSerializerNamespaces)

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

Serialize(XmlWriter, Object)

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

Serialize(XmlWriter, Object, XmlSerializerNamespaces)

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

Serialize(XmlWriter, Object, XmlSerializerNamespaces, String)

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

Serialize(XmlWriter, Object, XmlSerializerNamespaces, String, String)

指定した Object をシリアル化し、指定した XmlWriter、XML 名前空間、およびエンコーディングを使用して、XML ドキュメントをファイルに書き込みます。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

イベント

UnknownAttribute

逆シリアル化時に XmlSerializer が不明な型の XML 属性を認識した場合に発生します。

UnknownElement

逆シリアル化時に XmlSerializer が不明な型の XML 要素を認識した場合に発生します。

UnknownNode

逆シリアル化時に XmlSerializer が不明な型の XML ノードを認識した場合に発生します。

UnreferencedObject

SOAP エンコード済み XML ストリームの逆シリアル化時に、XmlSerializer が、未使用の型または参照されていない型を認識した場合に発生します。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

スレッド セーフ

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

こちらもご覧ください