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
屬性值
XML 架構定義 (XSD) 資料類型。
範例
下列範例會序列化名為 的 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 ,並視需要套用 XmlArrayItemAttribute DataType 屬性設定為 「base64Binary」 或 「hexBinary」 的 。 對於 XML 架構 time
和資料類型,請使用 DateTime 型別,並將 設定為 「date」 或 「time」 的 套用 XmlArrayItemAttribute DataType 。 date
針對對應至字串的每個 XML 架構類型,請套用 XmlArrayItemAttribute 其 DataType 屬性設定為 XML 架構類型的 。 不過,這不會變更序列化格式,只會變更成員的架構。
注意
屬性會區分大小寫,因此您必須將它完全設定為其中一個 XML 架構資料類型。
注意
將二進位資料當做 XML 元素傳遞會更有效率,然後將它當做 XML 屬性傳遞。
如需 XML 架構資料類型的詳細資訊,請參閱全球資訊網協會檔 XML 架構第 2 部分:資料類型。
XSD 資料類型 | .NET 資料類型 |
---|---|
anyURI | String |
base64Binary | Byte物件的陣列 |
boolean | Boolean |
byte | 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 |
token | String |
unsignedByte | Byte |
unsignedInt | UInt32 |
unsignedLong | UInt64 |
unsignedShort | UInt16 |