若要从数据协定模型中使用的类生成 XML 架构定义语言(XSD)架构,请使用该 XsdDataContractExporter 类。 本主题介绍创建架构的过程。
导出过程
架构导出过程以一个或多个类型开始,并生成一个描述这些类型的 XML 投影的 XmlSchemaSet。
XmlSchemaSet
它是表示一组 XSD 架构文档的 .NET Framework 架构对象模型(SOM)的一部分。 若要从XmlSchemaSet
创建 XSD 文档,请使用Schemas类的XmlSchemaSet
属性中的架构集合。 然后使用XmlSchema 序列化每个XmlSerializer 对象。
导出架构
创建XsdDataContractExporter的实例。
可选。 在构造函数中传递XmlSchemaSet。 在这种情况下,架构导出期间生成的架构将添加到此 XmlSchemaSet 实例,而不是从空白 XmlSchemaSet开始。
可选。 调用 CanExport 方法之一。 该方法确定是否可以导出指定的类型。 该方法与下一步中的
Export
方法具有相同的重载。调用 Export 方法之一。 有三个重载采用了 Type、 List<T> 对象的
Type
,或 List<T> 对象的 Assembly 。 在最后一种情况中,将导出所有给定程序集中的所有类型。多次调用
Export
方法会导致将多个项添加到同一个XmlSchemaSet
。 如果某个类型已经存在于XmlSchemaSet
中,则不会再在其中生成该类型。 因此,在同一个Export
上多次调用XsdDataContractExporter
比创建XsdDataContractExporter
类的多个实例更好。 这可避免生成重复的架构类型。注释
如果在导出期间出现故障,则
XmlSchemaSet
状态将不可预知。通过 XmlSchemaSet 属性访问 Schemas 。
导出选项
可以通过将Options属性设置为XsdDataContractExporter类的一个实例以控制ExportOptions的导出过程的各个方面。 具体而言,可以设置以下选项:
KnownTypes。 此集合
Type
表示所导出类型的已知类型。 (有关详细信息,请参阅数据协定已知类型。)除了传递给Export
方法的类型外,还会在每个Export
调用中导出这些已知类型。DataContractSurrogate。 可以通过此属性提供一个 IDataContractSurrogate 用于定制导出过程。 有关详细信息,请参阅 数据契约代理。 默认情况下,不使用代理项。
辅助方法
除了导出架构的主要角色外,XsdDataContractExporter
还提供了几个有用的帮助函数,这些函数提供有关类型的信息。 这些包括:
GetRootElementName 方法。 此方法接收一个
Type
并返回一个XmlQualifiedName,该XmlQualifiedName表示如果此类型被序列化为根对象时所使用的根元素名称和命名空间。GetSchemaTypeName 方法。 此方法获取一个
Type
并返回一个XmlQualifiedName,该XmlQualifiedName表示当此类型导出到架构时将使用的XSD架构类型名称。 对于 IXmlSerializable 在架构中表示为匿名类型的类型,此方法返回null
。GetSchemaType 方法。 此方法仅适用于 IXmlSerializable 在架构中表示为匿名类型的类型,并返回
null
所有其他类型。 对于匿名类型,此方法返回一个 XmlSchemaType,用于表示给定的Type
。
导出选项会影响所有这些方法。