有没有一种方法可以从DataContract导出XSD模式?

10
我正在使用DataContractSerializer将我的类序列化/反序列化为XML。一切正常,但是在某些时候,我希望建立一个标准模式来独立于实际代码格式化这些XML文件。这样,如果序列化过程中出现问题,我就可以回去检查标准模式应该是什么。或者,如果我确实需要修改模式,则修改是明确的决定,而不仅仅是修改代码后的影响。
此外,其他人可能正在编写其他软件,这些软件可能不基于.NET,但需要从这些XML文件中读取数据。我想能够向他们提供有关模式的某种文档。
DataContract和XSD模式之间是否存在某种关系?是否有一种方法可以将类中的DataContract属性导出为XSD模式?
3个回答

7

5

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

当使用元数据端点或ServiceModel Metadata Utility Tool(Svcutil.exe)从Windows Communication Foundation(WCF)服务导出元数据时,DataContractSerializer将CLR类型映射到XSD。有关详细信息,请参见Data Contract Serializer。

当使用Svcutil.exe访问Web Services Description Language(WSDL)或XSD文档并为服务或客户端生成数据契约时,DataContractSerializer还会将XSD映射到CLR类型。

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


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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接