9

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

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

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

4

3 回答 3

7

是的,您可以使用XsdDataContractExporter

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

于 2013-05-02T07:23:22.567 回答
5

Svcutil.exe 可以“导出已编译数据合同的元数据”DataContract 和 XSD
之间存在关系:

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

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

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

于 2010-04-08T23:16:03.260 回答
4

您可以使用 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。

于 2010-04-08T23:16:27.867 回答