XmlArrayItemAttribute.DataType 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置生成的 XML 元素的 XML 数据类型。
public:
property System::String ^ DataType { System::String ^ get(); void set(System::String ^ value); };
public string DataType { get; set; }
member this.DataType : string with get, set
Public Property DataType As String
属性值
(XSD) 数据类型的 XML 架构定义。
示例
The following example serializes a class named PurchaseOrder
. 类的 XmlArrayItemAttribute 多个实例应用于三个成员,每个 DataType 实例的属性设置为数组中允许的类型。
#using <System.dll>
#using <System.xml.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Xml;
using namespace System::Xml::Serialization;
using namespace System::IO;
using namespace System::Xml::Schema;
public ref class Item
{
public:
String^ ItemID;
Item(){}
Item( String^ id )
{
ItemID = id;
}
};
public ref class NewItem: public Item
{
public:
String^ Category;
NewItem(){}
NewItem( String^ id, String^ cat )
{
ItemID = id;
Category = cat;
}
};
public ref class PurchaseOrder
{
public:
[XmlArrayItem(DataType="gMonth",
ElementName="MyMonths",
Namespace="http://www.cohowinery.com")]
array<String^>^Months;
[XmlArrayItem(Item::typeid),XmlArrayItem(NewItem::typeid)]
array<Item^>^Items;
[XmlArray(IsNullable=true)]
[XmlArrayItem(String::typeid),
XmlArrayItem(Double::typeid),
XmlArrayItem(NewItem::typeid)]
array<Object^>^Things;
};
void SerializeObject( String^ filename )
{
// Create an instance of the XmlSerializer class;
// specify the type of object to serialize.
XmlSerializer^ serializer = gcnew XmlSerializer( PurchaseOrder::typeid );
TextWriter^ writer = gcnew StreamWriter( filename );
// Create a PurchaseOrder and set its properties.
PurchaseOrder^ po = gcnew PurchaseOrder;
array<String^>^months = {"March","May","August"};
po->Months = months;
array<Item^>^items = {gcnew Item( "a1" ),gcnew NewItem( "b1","book" )};
po->Items = items;
array<Object^>^things = {"String",2003.31,gcnew NewItem( "Item100","book" )};
po->Things = things;
// Serialize the purchase order, and close the TextWriter.
serializer->Serialize( writer, po );
writer->Close();
}
void DeserializeObject( String^ filename )
{
// Create an instance of the XmlSerializer class;
// specify the type of object to be deserialized.
XmlSerializer^ serializer = gcnew XmlSerializer( PurchaseOrder::typeid );
// A FileStream is needed to read the XML document.
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
// Declare an object variable of the type to be deserialized.
PurchaseOrder^ po;
/* Use the Deserialize method to restore the object's state with
data from the XML document. */
po = safe_cast<PurchaseOrder^>(serializer->Deserialize( fs ));
for ( int i = 0; i < po->Months->Length; ++i )
Console::WriteLine( po->Months[ i ] );
for ( int i = 0; i < po->Items->Length; ++i )
Console::WriteLine( po->Items[ i ]->ItemID );
for ( int i = 0; i < po->Things->Length; ++i )
Console::WriteLine( po->Things[ i ] );
}
int main()
{
// Read and write purchase orders.
SerializeObject( "ArrayItemEx.xml" );
DeserializeObject( "ArrayItemEx.xml" );
}
using System;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Xml.Schema;
public class PurchaseOrder
{
[XmlArrayItem(DataType = "gMonth",
ElementName="MyMonths",
Namespace = "http://www.cohowinery.com")]
public string[] Months;
[XmlArrayItem(typeof(Item)), XmlArrayItem(typeof(NewItem))]
public Item[] Items;
[XmlArray(IsNullable = true)]
[XmlArrayItem(typeof(string)),
XmlArrayItem(typeof(double)),
XmlArrayItem(typeof(NewItem))]
public object[] Things;
}
public class Item{
public string ItemID;
public Item(){}
public Item(string id){
ItemID = id;
}
}
public class NewItem:Item{
public string Category;
public NewItem(){}
public NewItem(string id, string cat){
this.ItemID = id;
Category = cat;
}
}
public class Test
{
public static void Main()
{
// Read and write purchase orders.
Test t = new Test();
t.SerializeObject("ArrayItemEx.xml");
t.DeserializeObject("ArrayItemEx.xml");
}
private void SerializeObject(string filename)
{
// Create an instance of the XmlSerializer class;
// specify the type of object to serialize.
XmlSerializer serializer =
new XmlSerializer(typeof(PurchaseOrder));
TextWriter writer = new StreamWriter(filename);
// Create a PurchaseOrder and set its properties.
PurchaseOrder po=new PurchaseOrder();
po.Months = new string[]{ "March", "May", "August"};
po.Items= new Item[]{new Item("a1"), new NewItem("b1", "book")};
po.Things= new object[] {"String", 2003.31, new NewItem("Item100", "book")};
// Serialize the purchase order, and close the TextWriter.
serializer.Serialize(writer, po);
writer.Close();
}
protected void DeserializeObject(string filename)
{
// Create an instance of the XmlSerializer class;
// specify the type of object to be deserialized.
XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
// A FileStream is needed to read the XML document.
FileStream fs = new FileStream(filename, FileMode.Open);
// Declare an object variable of the type to be deserialized.
PurchaseOrder po;
/* Use the Deserialize method to restore the object's state with
data from the XML document. */
po = (PurchaseOrder) serializer.Deserialize(fs);
foreach(string s in po.Months)
Console.WriteLine(s);
foreach(Item i in po.Items)
Console.WriteLine(i.ItemID);
foreach(object thing in po.Things)
Console.WriteLine(thing);
}
}
Imports System.Collections
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Imports System.Xml.Schema
Public Class PurchaseOrder
<XmlArrayItem(DataType:= "gMonth", _
ElementName:="MyMonths", _
Namespace:= "http:'www.cohowinery.com")> _
public Months() As String
<XmlArrayItem(GetType(Item)), XmlArrayItem(GetType(NewItem))> _
public Items () As Item
<XmlArray(IsNullable:= true), _
XmlArrayItem(GetType(String)), _
XmlArrayItem(GetType(double)), _
XmlArrayItem(GetType(NewItem))> _
public Things() As Object
End Class
Public Class Item
public ItemID As String
public Sub New()
End Sub
public Sub New (id As String)
ItemID = id
End Sub
End Class
Public Class NewItem
Inherits Item
public Category As String
public Sub New()
End Sub
public Sub New(id As String , cat As String )
me.ItemID = id
Category = cat
End Sub
End Class
Public Class Test
Shared Sub Main()
' Read and write purchase orders.
Dim t As Test = New Test()
t.SerializeObject("ArrayItemExVB.xml")
t.DeserializeObject("ArrayItemExVB.xml")
End Sub
private Sub SerializeObject(filename As String)
' Create an instance of the XmlSerializer class
' specify the type of object to serialize.
Dim serializer As XmlSerializer = _
New XmlSerializer(GetType(PurchaseOrder))
Dim writer As TextWriter = New StreamWriter(filename)
' Create a PurchaseOrder and set its properties.
Dim po As PurchaseOrder =New PurchaseOrder()
po.Months = New String() { "March", "May", "August"}
po.Items= New Item(){New Item("a1"), New NewItem("b1", "book")}
po.Things= New Object() {"String", 2003.31, New NewItem("Item100", "book")}
' Serialize the purchase order, and close the TextWriter.
serializer.Serialize(writer, po)
writer.Close()
End Sub
protected Sub DeserializeObject(filename As String)
' Create an instance of the XmlSerializer class
' specify the type of object to be deserialized.
Dim serializer As XmlSerializer = _
New XmlSerializer(GetType(PurchaseOrder))
' A FileStream is needed to read the XML document.
Dim fs As FileStream = New FileStream(filename, FileMode.Open)
' Declare an object variable of the type to be deserialized.
Dim po As PurchaseOrder
' Use the Deserialize method to restore the object's state with
' data from the XML document.
po = CType( serializer.Deserialize(fs), PurchaseOrder)
Dim s As String
Dim i As Item
Dim thing As Object
for each s in po.Months
Console.WriteLine(s)
Next
for each i in po.Items
Console.WriteLine(i.ItemID)
Next
for each thing in po.Things
Console.WriteLine(thing)
Next
End Sub
End Class
注解
下表列出了 XML 架构简单数据类型及其 .NET 等效项。
对于 XML 架构base64Binary
和hexBinary
数据类型,请使用对象的数组Byte,并根据需要将属性设置为“base64Binary”或“hexBinary”应用XmlArrayItemAttributeDataType该属性。 对于 XML 架构time
和date
数据类型,请使用该DateTime类型,并将集DataType应用于XmlArrayItemAttribute“date”或“time”。
对于映射到字符串的每个 XML 架构类型,请 XmlArrayItemAttribute 将其 DataType 属性设置为 XML 架构类型。 但是,这不会更改序列化格式,仅更改成员的架构。
备注
该属性区分大小写,因此必须将其完全设置为 XML 架构数据类型之一。
备注
将二进制数据作为 XML 元素传递效率更高,然后将其作为 XML 属性传递。
有关 XML 架构数据类型的详细信息,请参阅万维网联盟文档 XML 架构第 2 部分:数据类型。
XSD 数据类型 | .NET 数据类型 |
---|---|
anyURI | String |
base64Binary | Byte 对象的数组 |
boolean | Boolean |
字节 | SByte |
日期 | DateTime |
dateTime | DateTime |
Decimal | Decimal |
Double | Double |
ENTITY | String |
实体 | String |
FLOAT | Single |
gDay | String |
gMonth | String |
gMonthDay | String |
gYear | String |
gYearMonth | String |
hexBinary | Byte 对象的数组 |
ID | String |
IDREF | String |
IDREFS | String |
int | Int32 |
整型 | String |
语言 | String |
long | Int64 |
“属性” | String |
NCName | String |
negativeInteger | String |
NMTOKEN | String |
NMTOKENS | String |
normalizedString | String |
nonNegativeInteger | String |
nonPositiveInteger | String |
NOTATION | String |
positiveInteger | String |
QName | XmlQualifiedName |
duration | String |
字符串 | String |
short | Int16 |
time | DateTime |
令牌 | String |
unsignedByte | Byte |
unsignedInt | UInt32 |
unsignedLong | UInt64 |
unsignedShort | UInt16 |