.Net SvcUtil:属性必须是可选的

Mic*_*len 5 .net attributes xsd code-generation svcutil.exe

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

命令行:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer
Run Code Online (Sandbox Code Playgroud)

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

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

我变了

<xs:attribute name="Order" use="required">
Run Code Online (Sandbox Code Playgroud)

<xs:attribute name="Order" use="optional">
Run Code Online (Sandbox Code Playgroud)

<xs:attribute name="Order">
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在.是否可以使用属性,或者我是否必须将它们全部删除(在这种情况下,这种表现已经结束)?

Mic*_*len 6

答案和可能的解决方案可以在这里找到: MSDN:导入模式以生成类

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

如:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer /importXmlTypes
Run Code Online (Sandbox Code Playgroud)

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

private System.Xml.XmlNode[] nodesField;
Run Code Online (Sandbox Code Playgroud)

此致,米歇尔

  • 从xsd2code版本3.3 @ codeplex获得良好的结果. (3认同)