Freigeben über


XmlArrayItemAttribute.Type Eigenschaft

Definition

Dient zum Abrufen oder Festlegen des zulässigen Typs in einem Array.

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

Eigenschaftswert

Ein Type Wert, der im Array zulässig ist.

Beispiele

Im folgenden Beispiel wird ein Array von Objekten serialisiert. Das Feld, das das Array zurückgibt, wird zwei XmlArrayItemAttribute Instanzen zugeordnet. Jede Instanz weist die Anweisung an, das XmlSerializer angegebene Type Array zu akzeptieren.

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

Hinweise

Verwenden Sie die Type Eigenschaft, um einen überschriebenen Typ für ein öffentliches Feld oder einen öffentlichen Lese-/Schreibzugriff-Eigenschaftswert anzugeben.

Wenn ein Feld oder eine Eigenschaft ein Array vom Typ Objectzurückgibt, wenden Sie mehrere Instanzen des Felds oder der XmlArrayItemAttribute Eigenschaft an. Legen Sie für jede Instanz die Type Eigenschaft auf einen Objekttyp fest, der in das Array eingefügt werden kann.

Wenn ein Array nur primitive Typen enthält, müssen Sie die XmlArrayItemAttributeZeichenfolge nicht anwenden. Standardmäßig generiert die XmlSerializer Datei eine Reihe von Elementen, die jeweils denselben Elementnamen aufweisen, für jeden Wert, aber der Typ jedes Elements wird auf den XML-Schemadatentyp festgelegt. Beispiel: Der folgende Code:

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

führt zu diesem XML-Code:

<?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>

Wenn Sie jedoch die Type Eigenschaft für jeden Grundtyp angeben, wird der Elementname für jeden Wert mithilfe des .NET-Typnamens generiert. Beispiel:

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

führt zu diesem XML-Code:

<?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>

Gilt für: