Question

J'ai un client WCF qui a besoin de générer une requête contenant ce fragment XML:

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

Le schéma est déterminé par le serveur et ne sont pas sous mon contrôle. Le code proxy généré a une classe propriétés pour l'élément raison contenant (entre autres) et de nullFlavor typeCode. Le proxy utilise XmlSerializer.

Comment puis-je générer un tel fragment? Le XmlSerializer émet l'attribut xsi:nil que si le membre correspondant est nul. Et si elle est nulle, il ne peut pas très bien avoir des propriétés qui seront émis sous forme d'attributs!

BTW, le fragment est selon légal de la spécification XML Schema instance, qui dit un élément nul ne peut contenir aucun élément enfant ou texte interne, mais peut contiennent des attributs.

Était-ce utile?

La solution

Ceci est une limitation connue du XmlSerializer. Vous pourriez être en mesure de se déplacer avec une utilisation intelligente de l'interface IXmlSerializable et émettant le XML manuellement -. Malheureusement il n'y a pas une solution propre que je connaisse

Autres conseils

Voici la I solution utilisée pour ceux qui luttent encore avec cette question. Il est un peu un hack, mais cela fonctionne. Éteignez nillable et ajoutez et attribut comme ci-dessous

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top