有没有办法从 DataContract 导出 XSD 架构

Posted

技术标签:

【中文标题】有没有办法从 DataContract 导出 XSD 架构【英文标题】:Is there a way to export an XSD schema from a DataContract 【发布时间】:2011-02-05 22:29:31 【问题描述】:

我正在使用 DataContractSerializer 将我的类序列化/反序列化到 XML。一切正常,但在某些时候,我想为这些 XML 文件的格式建立一个独立于实际代码的标准模式。这样,如果序列化过程中出现问题,我总是可以返回并检查标准模式应该是什么。或者,如果我确实需要修改架构,那么修改是一个明确的决定,而不仅仅是修改我的代码的后期影响。

此外,其他人可能正在编写其他可能不是基于 .NET 的软件,这些软件需要从这些 XML 文件中读取。我希望能够为他们提供某种架构文档。

DataContract 和 XSD 架构之间是否存在某种关系。有没有办法将类中的 DataContract 属性导出为 XSD 架构?

【问题讨论】:

【参考方案1】:

是的,您可以使用XsdDataContractExporter。

MSDN 文章Exporting Schemas from Classes 中提供了一个示例。

【讨论】:

【参考方案2】:

Svcutil.exe can "export metadata for compiled data contracts".DataContract and XSD之间有关系:

当使用元数据终结点或 ServiceModel 元数据实用工具 (Svcutil.exe) 从 Windows Communication Foundation (WCF) 服务导出元数据时,DataContractSerializer 会将 CLR 类型映射到 XSD。有关详细信息,请参阅数据协定序列化程序。

当使用 Svcutil.exe 访问 Web 服务描述语言 (WSDL) 或 XSD 文档并为服务或客户端生成数据协定时,DataContractSerializer 还将 XSD 映射到 CLR 类型。

您也可以通过setting up 和MEX endpoint 在运行时获取XSD,甚至在您的浏览器中。 默认情况下,WSDL 将包含对可以通过端点访问的 XSD 的引用。

【讨论】:

【参考方案3】:

您也许可以使用 Visual Studio 附带的 svcutil.exe 工具从 DataContracts 生成架构文件。

svcutil myAssembly.dll
   - Generate metadata documents for Service Contracts and associated types in an assembly

svcutil myServiceHost.exe /serviceName:myServiceName
   - Generate metadata documents for a service, and all associated Service Contracts and data types in an assembly

svcutil myServiceHost.exe /dconly
   - Generate metadata documents for data types in an assembly

我相信我在过去的某个时刻搞砸了这个,并且可能会或可能不会让它工作。另一种生成模式的简单方法是建立一个使用数据协定的 WCF 服务,并访问 WSDL。 WSDL 将导入 DataContracts 的所有 xsd。

【讨论】:

以上是关于有没有办法从 DataContract 导出 XSD 架构的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从JavaScript文件中获取所有导出的名称?

有没有办法导出 Xcode 键绑定?

从 XSD 生成 DataContract

使用 YAML::XS 控制 hashref 的顺序

从对象 id 中提取日期并将其导出到 mongodb 中的 csv

DataContract在没有DataContractAttribute的情况下工作(直到混淆)