次の方法で共有


XmlArrayAttribute クラス

XmlSerializer が特定のクラス メンバを XML 要素の配列としてシリアル化することを指定します。

この型のすべてのメンバの一覧については、XmlArrayAttribute メンバ を参照してください。

System.Object
   System.Attribute
      System.Xml.Serialization.XmlArrayAttribute

<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field _
   Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue)>
Public Class XmlArrayAttribute   Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field
   | AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
public class XmlArrayAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Property |
   AttributeTargets::Field | AttributeTargets::Parameter |
   AttributeTargets::ReturnValue)]
public __gc class XmlArrayAttribute : public Attribute
[JScript]
public
   AttributeUsage(AttributeTargets.Property | AttributeTargets.Field |
   AttributeTargets.Parameter | AttributeTargets.ReturnValue)
class XmlArrayAttribute extends Attribute

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

XmlArrayAttribute は、 XmlSerializer がオブジェクトをシリアル化または逆シリアル化する方法を制御する一連の属性の 1 つです。類似する属性の全一覧については、「 XML シリアル化を制御する属性 」を参照してください。

XmlArrayAttribute は、オブジェクトの配列を返すパブリック フィールドまたは読み取り/書き込みプロパティに適用できます。これはコレクションにも適用できる他、 ArrayList を返すフィールド、または IEnumerable インターフェイスを実装するオブジェクトを返す任意のフィールドにも適用できます。

クラス メンバに XmlArrayAttribute を適用すると、 XmlSerializer クラスの Serialize メソッドによって、入れ子になった XML 要素のシーケンスがこのメンバから生成されます。XML スキーマ ドキュメント (.xsd ファイル) は、このような配列を complexType として示します。たとえば、シリアル化するクラスによって発注書を表す場合は、発注品目を表すオブジェクトの配列を返すパブリック フィールドに XmlArrayAttribute を適用すると、購入された品目の配列を生成できます。

複合型またはプリミティブ型のオブジェクトの配列を返すパブリック フィールドまたはプロパティにどの属性も適用されない場合は、既定では XmlSerializer が入れ子になった XML 要素のシーケンスを生成します。生成される XML 要素についてさらに詳細に制御するには、フィールドまたはプロパティに XmlArrayItemAttributeXmlArrayAttribute を適用します。たとえば、既定では、生成される XML 要素の名前はメンバ識別子から派生します。 ElementName プロパティを設定すると、生成される XML 要素名を変更できます。

指定された型の項目およびこの型から派生したすべてのクラスを含む配列をシリアル化するには、 XmlArrayItemAttribute を使用してそれぞれの型を宣言する必要があります。

メモ   コードでは、 XmlArrayAttribute の代わりに XmlArray という短い形式を使用できます。

属性の使用方法の詳細については、「 属性を使用したメタデータの拡張 」を参照してください。

使用例

[Visual Basic, C#, C++] クラス インスタンスを複数のオブジェクト配列を含む XML ドキュメントにシリアル化する例を次に示します。 XmlArrayAttribute は、XML 要素配列になるメンバに適用されます。

 
Option Explicit
Option Strict

Imports System
Imports System.IO
Imports System.Xml.Serialization
Imports System.Xml


Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeDocument("books.xml")
    End Sub
    
    
    Public Sub SerializeDocument(ByVal filename As String)
        ' Creates a new XmlSerializer.
        Dim s As New XmlSerializer(GetType(MyRootClass))
        
        ' Writing the file requires a StreamWriter.
        Dim myWriter As New StreamWriter(filename)
        
        ' Creates an instance of the class to serialize. 
        Dim myRootClass As New MyRootClass()
        
        ' Uses a basic method of creating an XML array: Create and
        ' populate a string array, and assign it to the
        ' MyStringArray property. 
        
        Dim myString() As String =  {"Hello", "world", "!"}
        myRootClass.MyStringArray = myString
        
        ' Uses a more advanced method of creating an array:
        ' create instances of the Item and BookItem, where BookItem
        ' is derived from Item. 
        Dim item1 As New Item()
        Dim item2 As New BookItem()
        
        ' Sets the objects' properties.
        With item1
            .ItemName = "Widget1"
            .ItemCode = "w1"
            .ItemPrice = 231
            .ItemQuantity = 3
        End With

        With item2
            .ItemCode = "w2"
            .ItemPrice = 123
            .ItemQuantity = 7
            .ISBN = "34982333"
            .Title = "Book of Widgets"
            .Author = "John Smith"
        End With
        
        ' Fills the array with the items.
        Dim myItems() As Item =  {item1, item2}
        
        ' Set class's Items property to the array.
        myRootClass.Items = myItems
        
        ' Serializes the class, writes it to disk, and closes
        ' the TextWriter. 
        s.Serialize(myWriter, myRootClass)
        myWriter.Close()
    End Sub
End Class


' This is the class that will be serialized.
Public Class MyRootClass
    Private myItems() As Item
    
    ' Here is a simple way to serialize the array as XML. Using the
    ' XmlArrayAttribute, assign an element name and namespace. The
    ' IsNullable property determines whether the element will be
    ' generated if the field is set to a null value. If set to true,
    ' the default, setting it to a null value will cause the XML
    ' xsi:null attribute to be generated.
    <XmlArray(ElementName := "MyStrings", _
         Namespace := "http://www.cpandl.com", _
         IsNullable := True)> _
    Public MyStringArray() As String
    
    ' Here is a more complex example of applying an
    ' XmlArrayAttribute. The Items property can contain both Item
    ' and BookItem objects. Use the XmlArrayItemAttribute to specify
    ' that both types can be inserted into the array.
    <XmlArrayItem(ElementName := "Item", _
        IsNullable := True, _
        Type := GetType(Item), _
        Namespace := "http://www.cpandl.com"), _
     XmlArrayItem(ElementName := "BookItem", _
        IsNullable := True, _
        Type := GetType(BookItem), _
        Namespace := "http://www.cohowinery.com"), _
     XmlArray()> _
    Public Property Items As Item()
        Get
            Return myItems
        End Get
        Set
            myItems = value
        End Set
    End Property
End Class
 
Public Class Item
    <XmlElement(ElementName := "OrderItem")> _
    Public ItemName As String
    Public ItemCode As String
    Public ItemPrice As Decimal
    Public ItemQuantity As Integer
End Class

Public Class BookItem
    Inherits Item
    Public Title As String
    Public Author As String
    Public ISBN As String
End Class


[C#] 
using System;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
 
public class Run
{
   public static void Main()
   {
      Run test = new Run();
      test.SerializeDocument("books.xml");
   }
 
   public void SerializeDocument(string filename)
   {
      // Creates a new XmlSerializer.
      XmlSerializer s = 
      new XmlSerializer(typeof(MyRootClass));

      // Writing the file requires a StreamWriter.
      TextWriter myWriter= new StreamWriter(filename);

      // Creates an instance of the class to serialize. 
      MyRootClass myRootClass = new MyRootClass();

      /* Uses a basic method of creating an XML array: Create and 
      populate a string array, and assign it to the 
      MyStringArray property. */

      string [] myString = {"Hello", "world", "!"};
      myRootClass.MyStringArray = myString;
       
      /* Uses a more advanced method of creating an array:
         create instances of the Item and BookItem, where BookItem 
         is derived from Item. */
      Item item1 = new Item();
      BookItem item2 = new BookItem();
  
      // Sets the objects' properties.
      item1.ItemName = "Widget1";
      item1.ItemCode = "w1";
      item1.ItemPrice = 231;
      item1.ItemQuantity = 3;
 
      item2.ItemCode = "w2";
      item2.ItemPrice = 123;
      item2.ItemQuantity = 7;
      item2.ISBN = "34982333";
      item2.Title = "Book of Widgets";
      item2.Author = "John Smith";
       
      // Fills the array with the items.
      Item [] myItems = {item1,item2};
       
      // Sets the class's Items property to the array.
      myRootClass.Items = myItems;
 
      /* Serializes the class, writes it to disk, and closes 
         the TextWriter. */
      s.Serialize(myWriter, myRootClass);
      myWriter.Close();
   }
}

// This is the class that will be serialized.
public class MyRootClass
{
   private Item [] items;
 
   /* Here is a simple way to serialize the array as XML. Using the
      XmlArrayAttribute, assign an element name and namespace. The
      IsNullable property determines whether the element will be 
      generated if the field is set to a null value. If set to true,
      the default, setting it to a null value will cause the XML
      xsi:null attribute to be generated. */
   [XmlArray(ElementName = "MyStrings",
   Namespace = "http://www.cpandl.com", IsNullable = true)]
   public string[] MyStringArray;
  
   /* Here is a more complex example of applying an 
      XmlArrayAttribute. The Items property can contain both Item 
      and BookItem objects. Use the XmlArrayItemAttribute to specify
      that both types can be inserted into the array. */
   [XmlArrayItem(ElementName= "Item", 
   IsNullable=true,
   Type = typeof(Item),
   Namespace = "http://www.cpandl.com"),
   XmlArrayItem(ElementName = "BookItem", 
   IsNullable = true, 
   Type = typeof(BookItem),
   Namespace = "http://www.cohowinery.com")]
   [XmlArray]
   public Item []Items
   {
      get{return items;}
      set{items = value;}
   }
}
 
public class Item{
   [XmlElement(ElementName = "OrderItem")]
   public string ItemName;
   public string ItemCode;
   public decimal ItemPrice;
   public int ItemQuantity;
}
 
public class BookItem:Item
{
   public string Title;
   public string Author;
   public string ISBN;
}
   

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;
using namespace System::Xml;
 
public __gc class Item{
public:
   [XmlElement(ElementName = S"OrderItem")]
   String* ItemName;
   String* ItemCode;
   Decimal ItemPrice;
   int ItemQuantity;
};
 
public __gc class BookItem:public Item
{
public:
   String* Title;
   String* Author;
   String* ISBN;
};
   
// This is the class that will be serialized.
public __gc class MyRootClass
{
private:
   Item* items[];
 
   /* Here is a simple way to serialize the array as XML. Using the
      XmlArrayAttribute, assign an element name and namespace. The
      IsNullable property determines whether the element will be 
      generated if the field is set to a null value. If set to true,
      the default, setting it to a null value will cause the XML
      xsi:null attribute to be generated. */
public:
   [XmlArray(ElementName = S"MyStrings",
   Namespace = S"http://www.cpandl.com", IsNullable = true)]
   String* MyStringArray[];
  
   /* Here is a more complex example of applying an 
      XmlArrayAttribute. The Items property can contain both Item 
      and BookItem objects. Use the XmlArrayItemAttribute to specify
      that both types can be inserted into the array. */
   [XmlArrayItem(ElementName= S"Item", 
   IsNullable=true,
   Type = __typeof(Item),
   Namespace = S"http://www.cpandl.com"),
   XmlArrayItem(ElementName = S"BookItem", 
   IsNullable = true, 
   Type = __typeof(BookItem),
   Namespace = S"http://www.cohowinery.com")]
   [XmlArray]
   __property Item* get_Items()[]{return items;}
   __property void set_Items( Item* value[] ){items = value;}
   
};
 
public __gc class Run
{
public:
   void SerializeDocument(String* filename)
   {
      // Creates a new XmlSerializer.
      XmlSerializer* s = 
      new XmlSerializer(__typeof(MyRootClass));

      // Writing the file requires a StreamWriter.
      TextWriter* myWriter= new StreamWriter(filename);

      // Creates an instance of the class to serialize. 
      MyRootClass* myRootClass = new MyRootClass();

      /* Uses a basic method of creating an XML array: Create and 
      populate a string array, and assign it to the 
      MyStringArray property. */

      String* myString[] = {S"Hello", S"world", S"!"};
      myRootClass->MyStringArray = myString;
       
      /* Uses a more advanced method of creating an array:
         create instances of the Item and BookItem, where BookItem 
         is derived from Item. */
      Item* item1 = new Item();
      BookItem* item2 = new BookItem();
  
      // Sets the objects' properties.
      item1->ItemName = S"Widget1";
      item1->ItemCode = S"w1";
      item1->ItemPrice = 231;
      item1->ItemQuantity = 3;
 
      item2->ItemCode = S"w2";
      item2->ItemPrice = 123;
      item2->ItemQuantity = 7;
      item2->ISBN = S"34982333";
      item2->Title = S"Book of Widgets";
      item2->Author = S"John Smith";
       
      // Fills the array with the items.
      Item* myItems[] = {item1,item2};
       
      // Sets the class's Items property to the array.
      myRootClass->Items = myItems;
 
      /* Serializes the class, writes it to disk, and closes 
         the TextWriter. */
      s->Serialize(myWriter, myRootClass);
      myWriter->Close();
   }
};

int main()
{
   Run* test = new Run();
   test->SerializeDocument(S"books.xml");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Xml.Serialization

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Xml (System.Xml.dll 内)

参照

XmlArrayAttribute メンバ | System.Xml.Serialization 名前空間 | XmlArray | XmlArrayItemAttribute | XmlAttributeOverrides | XmlAttributes | XmlSerializer | XML シリアル化の概要 | XML シリアル化のオーバーライド | XmlAttributes | 属性を使用した XML シリアル化の制御 | XML シリアル化の例