SoapElementAttribute.DataType 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定產生之 XML 項目的 XML 結構描述定義語言 (XSD) 資料型別。
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 結構描述資料型別。
範例
下列範例會序列化名為 Transportation 的類別實例,其中包含名為 Vehicle 的欄位。
SoapElementAttribute會套用至 欄位。 序列化欄位時,XML 元素名稱為 「Wheel」,而不是 「Vehicle」。 方法 SerializeOverride 會 SoapElementAttribute 建立 ,並將 的 SoapAttributes 屬性設定 SoapElement 為 SoapElementAttribute 。 會 SoapAttributes 新增至 SoapAttributeOverrides 用來建立 的 XmlTypeMapping 。
XmlSerializer會使用 XmlTypeMapping 建構 ,而 類別的 Transportation 實例會再次序列化。
SoapElementAttribute因為 是用來覆寫序列化,所以產生的 XML 元素名稱現在是 「Truck」,而不是 「Wheel」。
using System;
using System.IO;
using System.Xml.Serialization;
using System.Collections;
using System.Xml;
using System.Text;
public class Transportation
{
// The SoapElementAttribute specifies that the
// generated XML element name will be "Wheels"
// instead of "Vehicle".
[SoapElement("Wheels")]
public string Vehicle;
[SoapElement(DataType = "dateTime")]
public DateTime CreationDate;
[SoapElement(IsNullable = true)]
public Thing thing;
}
public class Thing{
[SoapElement(IsNullable=true)] public string ThingName;
}
public class Test
{
public static void Main()
{
Test t = new Test();
t.SerializeObject("SoapElementOriginal.xml");
t.SerializeOverride("SoapElementOverride.xml");
Console.WriteLine("Finished writing two XML files.");
}
// Return an XmlSerializer used for overriding.
public XmlSerializer CreateSoapOverrider()
{
// Create the SoapAttributes and SoapAttributeOverrides objects.
SoapAttributes soapAttrs = new SoapAttributes();
SoapAttributeOverrides soapOverrides =
new SoapAttributeOverrides();
/* Create an SoapElementAttribute to override
the Vehicles property. */
SoapElementAttribute soapElement1 =
new SoapElementAttribute("Truck");
// Set the SoapElement to the object.
soapAttrs.SoapElement= soapElement1;
/* Add the SoapAttributes to the SoapAttributeOverrides,
specifying the member to override. */
soapOverrides.Add(typeof(Transportation), "Vehicle", soapAttrs);
// Create the XmlSerializer, and return it.
XmlTypeMapping myTypeMapping = (new SoapReflectionImporter
(soapOverrides)).ImportTypeMapping(typeof(Transportation));
return new XmlSerializer(myTypeMapping);
}
public void SerializeOverride(string filename)
{
// Create an XmlSerializer instance.
XmlSerializer ser = CreateSoapOverrider();
// Create the object and serialize it.
Transportation myTransportation =
new Transportation();
myTransportation.Vehicle = "MyCar";
myTransportation.CreationDate=DateTime.Now;
myTransportation.thing = new Thing();
XmlTextWriter writer =
new XmlTextWriter(filename, Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.WriteStartElement("wrapper");
ser.Serialize(writer, myTransportation);
writer.WriteEndElement();
writer.Close();
}
public void SerializeObject(string filename){
// Create an XmlSerializer instance.
XmlSerializer ser = new XmlSerializer(typeof(Transportation));
Transportation myTransportation =
new Transportation();
myTransportation.Vehicle = "MyCar";
myTransportation.CreationDate = DateTime.Now;
myTransportation.thing = new Thing();
XmlTextWriter writer =
new XmlTextWriter(filename, Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.WriteStartElement("wrapper");
ser.Serialize(writer, myTransportation);
writer.WriteEndElement();
writer.Close();
}
}
Imports System.IO
Imports System.Xml.Serialization
Imports System.Collections
Imports System.Xml
Imports System.Text
Public Class Transportation
' The SoapElementAttribute specifies that the
' generated XML element name will be "Wheels"
' instead of "Vehicle".
<SoapElement("Wheels")> Public Vehicle As String
<SoapElement(DataType:= "dateTime")> _
public CreationDate As DateTime
<SoapElement(IsNullable:= true)> _
public thing As Thing
End Class
Public Class Thing
<SoapElement(IsNullable:=true)> public ThingName As string
End Class
Public Class Test
Shared Sub Main()
Dim t As Test = New Test()
t.SerializeObject("SoapElementOriginalVb.xml")
t.SerializeOverride("SoapElementOverrideVb.xml")
Console.WriteLine("Finished writing two XML files.")
End Sub
' Return an XmlSerializer used for overriding.
Public Function CreateSoapOverrider() As XmlSerializer
' Create the SoapAttributes and SoapAttributeOverrides objects.
Dim soapAttrs As SoapAttributes = New SoapAttributes()
Dim soapOverrides As SoapAttributeOverrides = _
New SoapAttributeOverrides()
' Create a SoapElementAttribute to override
' the Vehicles property.
Dim soapElement1 As SoapElementAttribute = _
New SoapElementAttribute("Truck")
' Set the SoapElement to the object.
soapAttrs.SoapElement= soapElement1
' Add the SoapAttributes to the SoapAttributeOverrides,
' specifying the member to override.
soapOverrides.Add(GetType(Transportation), "Vehicle", soapAttrs)
' Create the XmlSerializer, and return it.
Dim myTypeMapping As XmlTypeMapping = (New _
SoapReflectionImporter (soapOverrides)).ImportTypeMapping _
(GetType(Transportation))
return New XmlSerializer(myTypeMapping)
End Function
Public Sub SerializeOverride(filename As String)
' Create an XmlSerializer instance.
Dim ser As XmlSerializer = CreateSoapOverrider()
' Create the object and serialize it.
Dim myTransportation As Transportation = _
New Transportation()
myTransportation.Vehicle = "MyCar"
myTransportation.CreationDate = DateTime.Now
myTransportation.thing= new Thing()
Dim writer As XmlTextWriter = _
New XmlTextWriter(filename, Encoding.UTF8)
writer.Formatting = Formatting.Indented
writer.WriteStartElement("wrapper")
ser.Serialize(writer, myTransportation)
writer.WriteEndElement()
writer.Close()
End Sub
Public Sub SerializeObject(filename As String)
' Create an XmlSerializer instance.
Dim ser As XmlSerializer = _
New XmlSerializer(GetType(Transportation))
Dim myTransportation As Transportation = _
New Transportation()
myTransportation.Vehicle = "MyCar"
myTransportation.CreationDate=DateTime.Now
myTransportation.thing= new Thing()
Dim writer As XmlTextWriter = _
new XmlTextWriter(filename, Encoding.UTF8)
writer.Formatting = Formatting.Indented
writer.WriteStartElement("wrapper")
ser.Serialize(writer, myTransportation)
writer.WriteEndElement()
writer.Close()
End Sub
End Class
備註
下表列出 XML 架構單一資料型別及其 .NET 對等專案。
針對 XML 架構 base64Binary 和資料類型,請使用結構的陣列 Byte ,並視需要將 設定為 「base64Binary」 或 「hexBinary」 套用 SoapElementAttributeDataType 。 hexBinary 針對 XML 架構 time 和 date 資料類型,請使用 DateTime 型別,並將 套 DataType 用 SoapElementAttribute 為 「date」 或 「time」。
針對對應至字串的每個 XML 架構資料類型,請套用 其 SoapElementAttributeDataType 屬性設定為 XML 架構類型。 請注意,這不會變更序列化格式,只會變更成員的架構。
注意
屬性會區分大小寫,因此您必須將其設定為其中一個 XML 架構資料類型。
注意
將二進位資料當做 XML 元素傳遞比傳遞為 XML 屬性更有效率。
如需 XML 資料類型的詳細資訊,請參閱 World Wide Web Consortium 檔 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 |