5

我正在尝试使用 SvcUtil.exe 而不是 Xsd.exe 生成 C# 代码类。后者给我带来了一些问题。

命令行:

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

这里描述并解决了几个 SvcUtil 问题:http: //blog.shutupandcode.net/ ?p=761

我无法解决的一个问题是:错误:无法导入命名空间''中的类型'DatafieldDescription'。属性必须是可选的,并且来自命名空间“ http://schemas.microsoft.com/2003/10/Serialization/ ”。要么更改架构,以便类型可以映射到数据协定类型,要么使用 ImportXmlType 或使用不同的序列化程序。 '

我变了

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

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

<xs:attribute name="Order">

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

4

1 回答 1

6

可以在这里找到答案和可能的解决方案: 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;

问候,米歇尔

于 2010-05-31T08:57:53.237 回答