XmlArrayItemAttribute.Type Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define o tipo permitido em uma matriz.
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
Valor da propriedade
Um Type que é permitido na matriz.
Exemplos
O exemplo a seguir serializa uma matriz de objetos. O campo que retorna a matriz é atribuído com duas XmlArrayItemAttribute instâncias. Cada instância instrui o XmlSerializer a aceitar o especificado Type na matriz.
#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
Comentários
Use a Type propriedade para especificar um tipo substituído para um campo público ou um valor de propriedade pública de leitura/gravação.
Se um campo ou propriedade retornar uma matriz do tipo Object, aplique várias instâncias do XmlArrayItemAttribute ao campo ou à propriedade . Para cada instância, defina a Type propriedade como um tipo de objeto que pode ser inserido na matriz.
Se uma matriz contiver apenas tipos primitivos, você não precisará aplicar o XmlArrayItemAttribute. Por padrão, o XmlSerializer gera uma série de elementos, cada um com o mesmo nome de elemento, para cada valor, mas o tipo de cada elemento é definido como o tipo de dados esquema XML. Por exemplo, o código a seguir:
' 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};
}
resulta neste 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>
No entanto, se você especificar a Type propriedade para cada tipo primitivo, o nome do elemento para cada valor será gerado usando o nome do tipo .NET. Por exemplo, este código:
' 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};
}
resulta neste 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>