XmlArrayItemAttribute.Type Vlastnost

Definice

Získá nebo nastaví typ povolený v poli.Gets or sets the type allowed in an 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

Hodnota vlastnosti

Type

Type, Který je povolen v poli.A Type that is allowed in the array.

Příklady

Následující příklad serializace pole objektů.The following example serializes an array of objects. Pole, které vrací pole, má atribut se dvěma XmlArrayItemAttribute instancemi.The field that returns the array is attributed with two XmlArrayItemAttribute instances. Každá instance vydá pokyn XmlSerializer pro přijetí zadaného v poli Type .Each instance instructs the XmlSerializer to accept the specified Type in the array.

#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

Poznámky

Vlastnost použijte Type k určení přepsaného typu pro veřejné pole nebo veřejnou hodnotu vlastnosti pro čtení a zápis.Use the Type property to specify an overridden type for a public field or public read/write property value.

Pokud pole nebo vlastnost vrátí pole typu Object , aplikuje více instancí na XmlArrayItemAttribute pole nebo vlastnost.If a field or property returns an array of type Object, apply multiple instances of the XmlArrayItemAttribute to the field or property. Pro každou instanci nastavte Type vlastnost na typ objektu, který lze vložit do pole.For each instance, set the Type property to a type of object that can be inserted into the array.

Pokud pole obsahuje pouze primitivní typy, není nutné použít XmlArrayItemAttribute .If an array contains only primitive types, you do not need to apply the XmlArrayItemAttribute. Ve výchozím nastavení XmlSerializer generuje řada prvků, každý se stejným názvem elementu, pro každou hodnotu, ale typ každého elementu je nastaven na datový typ schématu XML.By default, the XmlSerializer generates a series of elements, each with the same element name, for each value, but the type of each element is set to the XML Schema data type. Například následující kód:For example, the following 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};  
}  

výsledky v tomto souboru XML:results in this 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>  

Nicméně pokud zadáte Type vlastnost pro každý primitivní typ, název elementu pro každou hodnotu je vygenerován pomocí názvu typu .NET.However, if you specify the Type property for each primitive type, the element name for each value is generated using the .NET type name. Například tento kód:For example this code:

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

výsledky v tomto souboru XML:results in this 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>  

Platí pro