从类导出架构
若要从数据协定模型中使用的类生成 XML 架构定义语言 (XSD) 架构,请使用 XsdDataContractExporter 类。 本主题描述创建架构的过程。
导出过程
架构导出过程以一个或多个类型开始,并生成一个 XmlSchemaSet ,描述这些类型的 XML 投影。
XmlSchemaSet
是 .NET Framework 的架构对象模型 (SOM) 的一部分,SOM 表示 XSD 架构文档集。 若要从 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 ,此名称和命名空间可在此类型被序列化为根对象时使用。GetSchemaTypeName 方法。 此方法采用
Type
并返回表示 XSD 架构类型名称的 XmlQualifiedName ,此名称可在此类型导出到架构中时使用。 对于表示架构中匿名类型的 IXmlSerializable 类型,此方法返回null
。GetSchemaType 方法。 此方法只能与表示架构中匿名类型的 IXmlSerializable 类型一起使用,并为所有其他类型返回
null
。 对于匿名类型,此方法返回表示给定 XmlSchemaType 的Type
。
导出选项会影响所有这些方法。