次の方法で共有


XmlArrayItemAttribute.Type プロパティ

定義

配列で許可される型を取得または設定します。

public:
 property Type ^ Type { Type ^ get(); void set(Type ^ value); };
public Type Type { get; set; }
public Type? Type { get; set; }
member this.Type : Type with get, set
Public Property Type As Type

プロパティ値

配列で許可されている Type

次の例では、オブジェクトの配列をシリアル化します。 配列を返すフィールドには、2 つの XmlArrayItemAttribute インスタンスが含まれます。 各インスタンスは、配列内の指定されたTypeを受け入れるようにXmlSerializerに指示します。

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);
   }
}
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


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

注釈

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>

適用対象