XmlArrayItemAttribute.Type 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置数组中允许的类型。
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.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
注解
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>