Xsd.exe генерирует ошибочную реализацию ‹xs:list›

Это пример того, что генерирует Xsd.exe (также Xsd2Code, но с использованием общего списка‹>).

/// <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 для разных примитивов...

И все эти свойства Text, которые не являются string[] (скорее double[] decimal[]), приводят к этому исключению во время выполнения при использовании с XmlSerializer: (я перевожу это на английский) Член Текст нельзя закодировать с помощью атрибута XmlText. Вы можете использовать атрибут XmlText с примитивами, перечислениями, строковыми массивами или массивами XmlNode.

Что вы мне посоветуете?


person Stephane Rolland    schedule 27.06.2011    source источник
comment
Вы экспериментировали с linqtoxsd.codeplex.com.   -  person Derek Beattie    schedule 28.06.2011
comment
Нет, я просто зашел на страницу... от попытки меня удержал тот факт, что я застрял на .net 3.5 и что Linq2Xsd v2.0 предназначен для .net 4.0... Но я попробую прежний версия сегодня днем ​​Linq2Xsd v1.0, которая может работать с .net 3.5 ... это идея попробовать, конечно. спасибо.   -  person Stephane Rolland    schedule 28.06.2011


Ответы (1)


Я отредактировал сгенерированный код xsd.exe и поместил

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

вместо

[System.Xml.Serialization.XmlTextAttribute()]

и насколько я могу судить...она ведет себя намного лучше....

ie

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

Но я должен убедиться, что включение всего этого списка в тег Test по-прежнему действует с моей схемой...

person Stephane Rolland    schedule 28.06.2011