Pergunta

Eu tenho um cliente WCF que precisa gerar uma solicitação contendo este fragmento XML:

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

O esquema é determinado pelo servidor e não está sob meu controle. O código de proxy gerado possui uma classe para o elemento motivo que contém (entre outras coisas) propriedades nullFlavor e typeCode. O proxy usa o XMLSerializer.

Como posso gerar esse fragmento? O XMLSerializer emite o xsi:nil atributo apenas se o membro correspondente for nulo. E se for nulo, não pode muito bem ter propriedades que serão emitidas como atributos!

BTW, o fragmento é legal de acordo com a especificação da instância do esquema XML, que diz que um elemento nulo não pode conter nenhum elemento filho ou texto interno, mas poderia contém atributos.

Foi útil?

Solução

Esta é uma limitação conhecida do XMLSerializer. Você pode contorná -lo com algum uso inteligente da interface ixmlSerializable e emitir o XML manualmente - infelizmente não há uma solução limpa que eu conheço.

Outras dicas

Aqui está a solução que usei para aqueles que ainda lutam com esse problema. É um pouco de hack, mas funciona. Desligue o Nillable e adicione e atribua como abaixo

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top