Udostępnij za pośrednictwem


XmlArrayItemAttribute.Type Właściwość

Definicja

Pobiera lub ustawia typ dozwolony w tablicy.

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

Wartość właściwości

Type

Wartość dozwolona Type w tablicy.

Przykłady

Poniższy przykład serializuje tablicę obiektów. Pole zwracające tablicę jest przypisywane do dwóch XmlArrayItemAttribute wystąpień. Każde wystąpienie instruuje XmlSerializer obiekt , aby akceptował wartość określoną Type w tablicy.

#using <System.Xml.dll>
#using <System.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;

public ref class Person
{
public:
   String^ Name;
};

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

public ref class Group
{
public:

   /* The Type property instructs the XmlSerializer to accept both
      the Person and Manager types in the array. */

   [XmlArrayItem(Type=Manager::typeid),
   XmlArrayItem(Type=Person::typeid)]
   array<Person^>^Staff;
};

void SerializeOrder( String^ filename )
{
   // Creates an XmlSerializer.
   XmlSerializer^ xSer = gcnew XmlSerializer( Group::typeid );

   // Creates the Group object, and two array items.
   Group^ myGroup = gcnew Group;
   Person^ p1 = gcnew Person;
   p1->Name = "Jacki";
   Manager^ p2 = gcnew Manager;
   p2->Name = "Megan";
   p2->Rank = 2;
   array<Person^>^myStaff = {p1,p2};
   myGroup->Staff = myStaff;
   
   // Serializes the object, and closes the StreamWriter.
   TextWriter^ writer = gcnew StreamWriter( filename );
   xSer->Serialize( writer, myGroup );
}

int main()
{
   SerializeOrder( "TypeEx.xml" );
}
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

Uwagi

Type Użyj właściwości , aby określić typ przesłoniętego pola publicznego lub wartość właściwości odczytu/zapisu publicznego.

Jeśli pole lub właściwość zwraca tablicę typu Object, zastosuj wiele wystąpień XmlArrayItemAttribute obiektu do pola lub właściwości. Dla każdego wystąpienia ustaw Type właściwość na typ obiektu, który można wstawić do tablicy.

Jeśli tablica zawiera tylko typy pierwotne, nie trzeba stosować elementu XmlArrayItemAttribute. Domyślnie program XmlSerializer generuje serię elementów, z których każda ma taką samą nazwę elementu, dla każdej wartości, ale typ każdego elementu jest ustawiony na typ danych Schemat XML. Na przykład następujący kod:

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

wyniki w tym kodzie 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>  

Jeśli jednak określisz właściwość dla każdego typu pierwotnego Type , nazwa elementu dla każdej wartości zostanie wygenerowana przy użyciu nazwy typu .NET. Na przykład ten kod:

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

wyniki w tym kodzie 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>  

Dotyczy