Domanda

Ho un cliente WCF che ha bisogno di generare una richiesta che contiene questo frammento XML:

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

Lo schema è determinato dal server e non è sotto il mio controllo. Il codice proxy generato ha una classe per l'elemento contenente motivo (tra le altre cose) proprietà nullFlavor e typeCode. Il proxy utilizza XmlSerializer.

Come posso generare un tale frammento? XmlSerializer emette l'attributo xsi:nil solo se il corrispondente organo è nullo. E se è nullo, non può benissimo avere le proprietà che verranno emessi come attributi!

A proposito, il frammento è secondo legale del XML Schema Instance specifica, che dice un elemento nullo non può contenere elementi figlio o testo interno, ma possono contenere attributi.

È stato utile?

Soluzione

Questa è una limitazione nota del XmlSerializer. Si può essere in grado di aggirare con qualche sapiente uso dell'interfaccia IXmlSerializable ed emettendo l'XML manualmente -. Purtroppo non c'è una soluzione pulita che io sappia

Altri suggerimenti

Ecco la soluzione che ho usato per quelli ancora alle prese con questo problema. E 'un po' di hack, ma funziona. Spegnere e aggiungere nillable e attributo come di seguito

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top