有没有办法从 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 架构的主要内容,如果未能解决你的问题,请参考以下文章