.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: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,
}
从通过前面的 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>
请参见
参考
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。