次の方法で共有


XmlArrayItemAttribute.Type プロパティ

配列内で使用できる型を取得または設定します。

Public Property Type As Type
[C#]
public Type Type {get; set;}
[C++]
public: __property Type* get_Type();public: __property void set_Type(Type*);
[JScript]
public function get Type() : Type;public function set Type(Type);

プロパティ値

配列内で使用できる Type

解説

Type プロパティを使用して、パブリック フィールドまたはパブリックな読み取り/書き込みプロパティ値についてオーバーライドされる型を指定します。

フィールドまたはプロパティが Object 型の配列を返す場合は、 XmlArrayItemAttribute の複数のインスタンスをフィールドまたはプロパティに適用します。各インスタンスの Type プロパティに、配列に挿入できるオブジェクトの型を設定します。

配列がプリミティブ型だけを格納している場合は、 XmlArrayItemAttribute を適用する必要はありません。既定では、 XmlSerializer によって、同じ要素名の一連の要素が値ごとに生成されますが、各要素の型は XML スキーマ データ型に設定されます。コード例を次に示します。

' Visual Basic code
Public Class Arrays
   Public XSDTypes ()As Object= New Object(){"one", 2, 3.0}
End Class
// C# code
public class MyArray{
   // No XmlArrayItemAttribute is applied. 
   public object[] XSDTypes= new object[]{"one", 2, 3.2};
}

結果の XML を次に示します。

<?xml version="1.0" encoding="utf-8"?>
<Arrays xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <XSDTypes>
    <Object xsi:type="xsd:string">one</Object>
    <Object xsi:type="xsd:int">2</Object>
    <Object xsi:type="xsd:double">3</Object>
  </XSDTypes>
</Arrays>

ただし、各プリミティブ型の Type プロパティを指定した場合は、各値の要素名は .NET 型名を使用して生成されます。コード例を次に示します。

' Visual Basic code
Public Class Arrays
   <XmlArrayItem(GetType(String)), _
   XmlArrayItem(GetType(Integer)), _
   XmlArrayItem(GetType(Double))> _
   Public PrimitiveTypes () As Object = New Object(){"one", 2, 3.0}
End Class
// C# code
public class Arrays{
   [XmlArrayItem(typeof(string))]
   [XmlArrayItem(typeof(int))]
   [XmlArrayItem(typeof(double))]
   public object [] PrimitiveTypes = new object[]{"one", 2, 3.0};
}

結果の XML を次に示します。

<?xml version="1.0" encoding="utf-8"?>
<Arrays xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PrimitiveTypes>
    <string>one</string>
    <int>2</int>
    <double>3</double>
  </PrimitiveTypes>
</Arrays>

使用例

[Visual Basic, C#, C++] オブジェクトの配列をシリアル化する例を次に示します。配列を返すフィールドは 2 つの XmlArrayItemAttribute インスタンスにより属性が設定されています。それぞれのインスタンスは XmlSerializer に対して、配列内の指定された Type を受け入れるように指示します。

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



Public Class Group
    ' The Type property instructs the XmlSerializer to accept both
    ' the Person and Manager types in the array. 
    <XmlArrayItem(Type := GetType(Manager)), _
     XmlArrayItem(Type := GetType(Person))> _
    Public Staff() As Person
        
End Class 'Group


Public Class Person
    Public Name As String
End Class 


Public Class Manager
    Inherits Person
    Public Rank As Integer
End Class 


Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeOrder("TypeEx.xml")
    End Sub 
        
    
    Public Sub SerializeOrder(filename As String)
        ' Creates an XmlSerializer.
        Dim xSer As New XmlSerializer(GetType(Group))
        
        ' Creates the Group object, and two array items.
        Dim myGroup As New Group()
        
        Dim p1 As New Person()
        p1.Name = "Jacki"
        Dim p2 As New Manager()
        
        p2.Name = "Megan"
        p2.Rank = 2
        
        Dim myStaff() As Person =  {p1, p2}
        myGroup.Staff = myStaff
        
        ' Serializes the object, and closes the StreamWriter.
        Dim writer As New StreamWriter(filename)
        xSer.Serialize(writer, myGroup)
    End Sub 
End Class 'Run

[C#] 
using System;
using System.IO;
using System.Xml.Serialization;

public class Group
{
   /* The Type property instructs the XmlSerializer to accept both
   the Person and Manager types in the array. */
   [XmlArrayItem(Type = typeof(Manager)),
   XmlArrayItem(Type=typeof(Person))]
   public Person[]Staff;
}

public class Person
{
   public string Name;
}

public class Manager:Person
{
   public int Rank;
}

public class Run 
{
   public static void Main()
   {
      Run test = new Run();
      test.SerializeOrder("TypeEx.xml");
   }


   public void SerializeOrder(string filename)
   {
      // Creates an XmlSerializer.
      XmlSerializer xSer = 
      new XmlSerializer(typeof(Group));

      // Creates the Group object, and two array items.
      Group myGroup = new Group();

      Person p1 = new Person();
      p1.Name = "Jacki";
      Manager p2 = new Manager();

      p2.Name = "Megan";
      p2.Rank = 2;

      Person [] myStaff = {p1,p2};
      myGroup.Staff = myStaff;

      // Serializes the object, and closes the StreamWriter.
      TextWriter writer = new StreamWriter(filename);
      xSer.Serialize(writer, myGroup);
   }
}

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;

public __gc class Person
{
public:
   String* Name;
};

public __gc class Manager:public Person
{
public:
   int Rank;
};

public __gc class Group
{
   /* The Type property instructs the XmlSerializer to accept both
   the Person and Manager types in the array. */
public:
   [XmlArrayItem(Type = __typeof(Manager)),
      XmlArrayItem(Type=__typeof(Person))]
   Person* Staff[];
};

void SerializeOrder(String* filename)
{
   // Creates an XmlSerializer.
   XmlSerializer* xSer = 
      new XmlSerializer(__typeof(Group));

   // Creates the Group object, and two array items.
   Group* myGroup = new Group();

   Person* p1 = new Person();
   p1->Name = S"Jacki";
   Manager* p2 = new Manager();

   p2->Name = S"Megan";
   p2->Rank = 2;

   Person* myStaff[] = {p1,p2};
   myGroup->Staff = myStaff;

   // Serializes the object, and closes the StreamWriter.
   TextWriter* writer = new StreamWriter(filename);
   xSer->Serialize(writer, myGroup);
}

int main()
{
   SerializeOrder(S"TypeEx.xml");
}

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

必要条件

プラットフォーム: 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

参照

XmlArrayItemAttribute クラス | XmlArrayItemAttribute メンバ | System.Xml.Serialization 名前空間