本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.
.NET Framework 为 value 特性提供部分绑定支持。
如果向基于字符串的类型应用了枚举限制,Xsd.exe 工具就会将 <enumeration> 方面的 value 特性转换为 .NET Framework 的 enum 成员。否则,在 XML 架构的方面与 .NET Framework 中的类定义之间将不存在任何绑定。
说明
通过约束基简单类型的值,XML 架构定义语言提供了多种不同的机制来派生新的简单类型。这些约束称为方面,在 <simpleType>(或 <simpleContent>)定义中指定为 <restriction> 元素的子级,并通过 XPath simpleType/restriction/facetName
定位,其中 facetName
是具体的方面。方面元素的 value 特性指定适用于该方面的值。
基于字符串的枚举中的值特性
如果向基于字符串的数据类型应用了枚举限制,Xsd.exe 工具就会将 <enumeration> 方面的 value 特性转换为 .NET Framework 的 enum 成员。数据类型是通过 <restriction> 元素的 base 特性指定的。有关 Xsd.exe 工具将其解释为字符串的内置 XML 架构数据类型的列表,请参见 <enumeration> 元素。
枚举值必须是有效的常数名称,或者是由 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 架构枚举值的默认绑定。
value 特性的其他用法
除了基于字符串绑定数据类型的枚举以外,在使用 XML 架构方面的简单类型限制与 .NET Framework 中的类定义之间没有任何绑定。这意味着以下内容(基于字符串的枚举除外):
当从 XML 架构文档生成源代码时,Xsd.exe 会忽略对简单类型的限制;它只是生成与基简单类型对应的 .NET Framework 类型。
在将对象序列化为 XML 以及将 XML 反序列化为对象时,XmlSerializer 类不考虑这些限制。
在架构对象模型中,System.Xml.Schema 命名空间有一个具有 Value 属性的 XmlSchemaFacet 抽象类。对于每个可能的限制方面,从 XmlSchemaFacet 派生的类型都可用来以编程方式创建通过方面进行限制的架构对象模型。
**可能的包含元素:**所有的限制方面