共用方式為


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:decimalSystem.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:stringxsd: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>

請參閱

參考

XmlSchemaEnumerationFacet

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.