Frage

Ich habe einen WCF-Client, dass der Bedarf eine Anforderung mit diesem XML-Fragmente zu erzeugen:

<reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" />

Das Schema wird durch den Server bestimmt und ist nicht unter meiner Kontrolle. Der generierte Proxy-Code hat eine Klasse aus dem Grund-Elemente enthält (unter anderem) Eigenschaften nullFlavor und typeCode. Der Proxy verwendet die XmlSerializer.

Wie kann ich ein solches Fragment erzeugen? Die XmlSerializer emittiert das xsi:nil Attribut nur dann, wenn das entsprechende Element null ist. Und wenn es null ist, kann es nicht sehr gut Eigenschaften aufweist, die als Attribut emittiert werden!

BTW, ist das Fragment legal nach der XML-Schema-Instanz-Spezifikation, die sagt, ein Null-Element keine untergeordneten Elemente oder inneren Text enthalten kann, aber kann enthält Attribute.

War es hilfreich?

Lösung

Dies ist eine bekannte Einschränkung des XmlSerializer. können Sie in der Lage sein, um es zu bekommen mit einigem geschickten Einsatz der IXmlSerializable Schnittstelle und Emittieren des XML manuell -. leider gibt es keine saubere Lösung, die ich kenne

Andere Tipps

Dies ist die Lösung, die ich für die, verwendet noch mit diesem Problem zu kämpfen. Es ist ein bisschen wie ein Hack, aber es funktioniert. Schalten Sie nillable und fügen und Attribut wie unten

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top