enumeration 元素绑定支持

.NET Framework 为 <enumeration> 元素提供部分绑定支持。

只有当 <enumeration> 方面应用于基于字符串的类型(如 xsd:string)时,Xsd.exe 才将它转换为 .NET Framework enum 定义。

说明

<enumeration> 元素用于基于一个简单数据类型来创建有限的一组选项。 使用它,可以通过限制基类型来从现有的简单类型派生新的简单类型。 基类型可能已作为枚举创建。

XML 架构规范允许将 <enumeration> 方面应用于 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)相对应的字段。 否则,当枚举仅仅填充自己的全局定义元素时,该枚举将直接被忽略。

基于字符串的枚举中的值属性

枚举值必须是有效的常数名称,或者是由 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 枚举。 下面的简单类型定义绑定到 enum 类型,因为它指定 base="xsd:string"

<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,
}

从通过前面的 C# 源代码编译得到的程序集生成的 XML 架构复杂类型和简单类型:

  <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

有关 value 属性在以基于字符串的简单数据类型(如 xsd:string)为基础的枚举中的用法,请参见基于字符串的枚举中的值属性。

对于其他所有可枚举的数据类型,将忽略 value 属性。

请参见 value 属性绑定支持 属性。

可能的父元素:<restriction>

可能的子元素:<annotation>

请参见

参考

XmlSchemaEnumerationFacet

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。