Pregunta

Tengo un cliente WCF que las necesidades para generar una solicitud que contiene este fragmento XML:

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

El esquema se determina por el servidor y no está bajo mi control. El código proxy generado tiene una clase para el elemento de razón que contiene (entre otras cosas) y propiedades nullFlavor typeCode. El proxy usa XmlSerializer.

¿Cómo puedo generar un fragmento de tal? El XmlSerializer emite el atributo xsi:nil sólo si el miembro correspondiente es nulo. Y si es nula, no puede muy bien tener propiedades que se emitirán como atributos!

Por cierto, el fragmento es de acuerdo legal al esquema XML Instancia de especificaciones, que dice un elemento nulo no puede contener elementos secundarios o texto interno, pero puede contener atributos.

¿Fue útil?

Solución

Esto es una limitación conocida de la XmlSerializer. Usted puede ser capaz de moverse con un poco de un uso inteligente de la interfaz IXmlSerializable y emitiendo el XML manualmente -. Por desgracia no es una solución limpia que yo sepa

Otros consejos

Esta es la solución que se utiliza para los que siguen luchando con este problema. Es un poco de un truco, pero funciona. Apague nillable y agregar y atributo de la siguiente manera

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top