Enumeration 項目繫結支援
.NET Framework 會提供 <enumeration> 項目的部分繫結支援。
只有當 <enumeration> Facet 套用至如 xsd:string 的字串型別時,Xsd.exe 才會將此 Facet 轉譯成 .NET Framework enum 定義。
說明
<enumeration> 項目是用來從簡單資料型別建立一組有限的選項。此項目可以用來限制基底型別 (Base Type),藉以從現有的簡單型別衍生新的簡單型別。基底型別可能已經建立做為列舉。
XML 結構描述規格允許 <enumeration> Facet 套用至 xsd:boolean 以外的任何簡單型別。然而,從 XML 結構描述文件產生原始程式碼時,Xsd.exe 只會辨識以 xsd:string 等字串簡單資料型別為基礎的列舉做為列舉。在那種情況下,轉譯會產生 enum 定義。
下列 XML 結構描述定義語言中的內建型別會轉譯成 enum 型別定義:
string
normalizedString
token
Name
NCName
ID
ENTITY
NMTOKEN
從一組類別產生 XML 結構描述文件時,Xsd.exe 會將 enum 定義轉譯成以 xsd:string 為基礎的列舉。
Xsd.exe 工具處理其他非字串簡單型別的方式需視內容和型別而定。對於以內建數值資料型別為基礎的列舉而言,只要列舉顯示為複雜型別中的項目或屬性,轉譯就會產生對應到基底型別的型別欄位 (例如 xsd:decimal 的 System.Decimal)。否則,列舉只是填入 (Populate) 自己的全域定義項目,就可以輕易地被略過。
字串型列舉中的 value 屬性
列舉值必須限定為有效常數名稱或是由 Xsd.exe 轉換為常數名稱。下列為列舉值的範例:
<xsd:enumeration value="IRISH CREAM" />
此值會轉換為下列 enum 成員:
[System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
IRISHCREAM,
移除一個空格可以產生有效常數名稱,並且將 XmlEnumAttribute 屬性套用至 enum 成員。屬性參數會變更針對該 enum 值而使用的 XML 結構描述列舉值。預設值即為 enum 值本身,在此例中為 IRISHCREAM
。對於已經限定為有效常數名稱的 XML 結構描述列舉值而言,則會省略 XmlEnum 屬性。
當 .NET Framework 不會將數值 XSD 列舉轉譯為 enum 定義時,就會轉譯值碰巧為數字的字串 XSD 列舉。下列簡單型別定義指定 base="xsd:string"
,因此會繫結至 enum 型別:
<xsd:simpleType name="Primes">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="5" />
<xsd:enumeration value="7" />
<xsd:enumeration value="11" />
<xsd:enumeration value="13" />
<xsd:enumeration value="17" />
</xsd:restriction>
</xsd:simpleType>
然後產生下列 enum 型別:
public enum Primes {
[System.Xml.Serialization.XmlEnumAttribute("2")]
Item2,
[System.Xml.Serialization.XmlEnumAttribute("3")]
Item3,
[System.Xml.Serialization.XmlEnumAttribute("5")]
Item5,
[System.Xml.Serialization.XmlEnumAttribute("7")]
Item7,
[System.Xml.Serialization.XmlEnumAttribute("11")]
Item11,
[System.Xml.Serialization.XmlEnumAttribute("13")]
Item13,
[System.Xml.Serialization.XmlEnumAttribute("17")]
Item17,
}
XmlEnum 屬性會再次用來覆寫 xsd:enumeration 值至 XML 結構描述列舉值的預設繫結。
範例
定義 xsd:string 和 xsd:int 列舉的輸入 XML 結構描述文件:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
<xsd:element name="coffeeDrink" type="FancyCoffeeType" />
<xsd:complexType name="FancyCoffeeType">
<xsd:attribute ref="selection" use="required" />
<xsd:attribute ref="shots" use="required" />
</xsd:complexType>
<xsd:attribute name="selection" type="Flavors"/>
<xsd:attribute name="shots" type="Primes"/>
<xsd:simpleType name="Flavors">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="VANILLA" />
<xsd:enumeration value="HAZELNUT" />
<xsd:enumeration value="CARAMEL" />
<xsd:enumeration value="RASPBERRY" />
<xsd:enumeration value="ALMOND" />
<xsd:enumeration value="CHERRY" />
<xsd:enumeration value="IRISH CREAM" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="Primes">
<xsd:restriction base="xsd:int">
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="5" />
<xsd:enumeration value="7" />
<xsd:enumeration value="11" />
<xsd:enumeration value="13" />
<xsd:enumeration value="17" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
由前面的 XML 結構描述文件所產生的 C# 類別。整數列舉已由型別 int 的欄位取代:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("coffeeDrink", Namespace="http://example.org/", IsNullable=false)]
public class FancyCoffeeType {
[System.Xml.Serialization.XmlAttributeAttribute()]
public Flavors selection;
[System.Xml.Serialization.XmlAttributeAttribute()]
public int shots;
}
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
public enum Flavors {
VANILLA,
HAZELNUT,
CARAMEL,
RASPBERRY,
ALMOND,
CHERRY,
System.Xml.Serialization.XmlEnumAttribute("IRISH CREAM")]
IRISHCREAM,
}
XML 結構描述複雜型別和簡單型別會從前面 C# 原始檔所編譯的組件而產生:
<xs:complexType name="FancyCoffeeType">
<xs:attribute name="selection" type="tns:Flavors" />
<xs:attribute name="shots" type="xs:int" />
</xs:complexType>
<xs:simpleType name="Flavors">
<xs:restriction base="xs:string">
<xs:enumeration value="VANILLA" />
<xs:enumeration value="HAZELNUT" />
<xs:enumeration value="CARAMEL" />
<xs:enumeration value="RASPBERRY" />
<xs:enumeration value="ALMOND" />
<xs:enumeration value="CHERRY" />
<xs:enumeration value="IRISH CREAM" />
</xs:restriction>
</xs:simpleType>
可能的屬性 | 繫結支援 |
---|---|
id |
Xsd.exe 公用程式忽略試圖提供唯一識別項的 id 屬性。 |
value |
如需在以字串型簡單資料型別為基礎的列舉中 (例如 xsd:string),使用 value 屬性的方式,請參閱字串型列舉中的 value 屬性。 如果使用所有其他列舉資料型別,則會忽略 value 屬性。 請參閱 Value 屬性繫結支援 屬性。 |
可能的父項目:<restriction>
可能的子項目:<annotation>
請參閱
參考
Copyright © 2007 by Microsoft Corporation. All rights reserved.