2010-05-31 101 views
4

我试图用SvcUtil.exe而不是Xsd.exe生成C#代码类。后者给我一些问题。.Net SvcUtil:属性必须是可选的

命令行:描述这里解决

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer 

几个SvcUtil工具问题: http://blog.shutupandcode.net/?p=761

一个问题我解决不了是这个:错误:类型 'DatafieldDescription' 命名空间“ '不能导入。属性必须是可选的,并且来自命名空间'http://schemas.microsoft.com/2003/10/Seri alization /'。要么更改模式,以便类型可映射到数据合约类型,或使用ImportXmlType或使用不同的序列化程序。 '

我改变

<xs:attribute name="Order" use="required"> 

<xs:attribute name="Order" use="optional"> 

<xs:attribute name="Order"> 

但仍然是错误。是否可以使用属性,还是必须全部删除它们(在这种情况下,这个练习结束了)?

回答

5

答案,和一个可能的解决方案,可以在这里找到: MSDN: Importing Schema to Generate Classes

具体: 的XsdDataContractImporter支持的模式的一个有限子集。如果存在存在不受支持的架构结构(例如,,XML属性),则导入尝试失败并出现异常。但是,将ImportXmlType属性设置为true可扩展支持的模式范围。设置为true时,XsdDataContractImporter会生成实现IXmlSerializable接口的类型。这使得可以直接访问这些类型的XML表示。

如:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer /importXmlTypes 

可悲的是,这将导致这种代码:

private System.Xml.XmlNode[] nodesField; 

问候, 米歇尔

+2

充分利用xsd2code版本3.3的好成绩@ CodePlex上。 – 2010-05-31 14:21:17

+0

+1:帮我弄清了我用XMLSchemaSet.Compile()所遇到的一个问题...... – IAbstract 2011-09-03 14:09:44

相关问题