我正在使用DataContractSerializer将我的类序列化/反序列化为XML。一切正常,但在某些时候,我想为这些XML文件的格式建立一个独立于实际代码的标准模式。这样,如果在序列化过程中出现问题,我总是可以返回并检查标准模式应该是什么。或者,如果我确实需要修改模式,则修改是一个明确的决定,而不仅仅是稍后修改我的代码的影响。
此外,其他人可能正在编写其他可能不是基于.NET的软件,需要从这些XML文件中读取。我希望能够为他们提供某种模式的文档。
DataContract和XSD架构之间是否存在某种关系。有没有办法将类中的DataContract属性导出为XSD架构?
答案 0 :(得分:7)
是的,您可以使用XsdDataContractExporter。
MSDN文章Exporting Schemas from Classes中提供了一个示例。
答案 1 :(得分:4)
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的引用。
答案 2 :(得分: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的所有xsds。