3 Stimmen

Xsd.exe erzeugt fehlerhafte Implementierung von <xs:list>

Dies ist ein Beispiel dafür, was Xsd.exe erzeugt (auch Xsd2Code, aber unter Verwendung von generischen List<>).

/// <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
}

Ich habe es mit einem sehr großen Schema zu tun, das mehrere Male xs:list für verschiedene Primitive verwendet...

Und alle diese Text-Eigenschaften, die nicht string[] (sondern double[] decimal[]) sind, führen alle zu dieser Ausnahme zur Laufzeit bei Verwendung mit XmlSerializer (Ich übersetze es ins Englische) Das Mitglied Text kann nicht mit dem Attribut XmlText kodiert werden. Sie können das Attribut XmlText mit Primitiven, Enums, String-Arrays oder XmlNode-Arrays verwenden.

Was raten Sie mir?

1voto

Stephane Rolland Punkte 36818

Ich habe den von xsd.exe generierten Code bearbeitet und Folgendes hinzugefügt

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

anstelle von

[System.Xml.Serialization.XmlTextAttribute()]

und soweit ich das beurteilen kann... verhält es sich viel besser....

dh

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

Aber ich sollte sicherstellen, dass das Einschließen der gesamten Liste in den Test-Tag noch mit meinem Schema gültig ist...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X