我正在尝试使用SvcUtil.exe而不是Xsd.exe生成C#代码类。后者给了我一些问题。
命令行:
SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer
这里描述并解决了几个SvcUtil问题:
http://blog.shutupandcode.net/?p=761
我无法解决的一个问题是:错误:无法导入 namespace “”中的“DatafieldDescription”类型。属性必须是可选的,并且必须来自命名空间'http://schemas.microsoft.com/2003/10/Seri
变质/'。更改架构,以便这些类型可以映射到数据协定类型,或者使用ImportXmlType或使用其他序列化器。
'
我变了
<xs:attribute name="Order" use="required">
至
<xs:attribute name="Order" use="optional">
和
<xs:attribute name="Order">
但是错误仍然存在。是否可以使用属性,还是必须全部删除属性(在这种情况下,本次练习已结束)?
最佳答案
答案和可能的解决方案可以在这里找到:
MSDN: Importing Schema to Generate Classes
具体的:
XsdDataContractImporter支持模式的有限子集。如果存在不受支持的模式架构(例如,XML属性),则导入尝试将失败,并发生异常。但是,将ImportXmlType属性设置为true可以扩展架构支持的的范围。设置为true时,XsdDataContractImporter会生成实现IXmlSerializable接口(interface)的类型。这样就可以直接访问这些类型的XML表示形式。
如:
SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer /importXmlTypes
令人遗憾的是,这将导致以下代码:
private System.Xml.XmlNode[] nodesField;
问候,
米歇尔