Xsd.exe生成<xs:list> </xs:list>的错误实现

时间:2011-06-27 15:53:13

标签: c# code-generation xsd.exe

这是 Xsd.exe 生成的示例(也是Xsd2Code但使用通用List&lt;&gt;)。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="xxxxxxxxxxxxxxxx")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="xxxxxxxxxxxxxxxx", IsNullable=false)]
public partial class ItemQuantity 
{

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Units;

    /// <remarks/>
    [System.Xml.Serialization.XmlAnyAttributeAttribute()]
    public System.Xml.XmlAttribute[] AnyAttr;

    /// <remarks/>
    [System.Xml.Serialization.XmlTextAttribute()] // <-- this is the bug
    public double[] Text;   // <-- this is the bug corresponding to a <xs:list itemType=xs:double/> in the schema
}

我正在处理一个非常大的模式,它使用了几次xs:list来表示不同的原语......

所有这些不是字符串[](而不是double [] decimal [])的Text属性在运行时与XmlSerializer 一起使用时都会导致此异常:(我用英语翻译它) )无法使用属性XmlText对成员Text进行编码。您可以将属性XmlText与基元,枚举,字符串数组或XmlNode数组一起使用。

你有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我编辑了xsd.exe生成的代码并放入

[System.Xml.Serialization.XmlArrayItemAttribute("Double",typeof(double), IsNullable = false)]

而不是

[System.Xml.Serialization.XmlTextAttribute()]

据我所知,......确实表现得更好......

<Test><Double>0.1</Double><Double>0.2</Double><Double>0.8</Double><Double>0.505</Double></Test>

但是我应该确保在Test标签中包含所有列表对我的架构仍然有效...