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 , допустимое в массиве.
Примеры
В следующем примере сериализуется массив объектов. Поле, возвращающее массив, является атрибутом двух XmlArrayItemAttribute экземпляров. Каждый экземпляр указывает XmlSerializer принять указанный Type в массиве.
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>