Páginas filhas
  • Comportamento da desserialização de XML | Valores vazios e nulos


Propósito

O objetivo desse Grooming foi o de alinhar como deveria ser o comportamentos padrão ao desserializar uma string, que contem um XML, para um objeto da linguagem que a recebeu. 

O maior ponto de dúvida estava em como tratar os seguintes cenários:

  • Tags vazias
  • Tags nulas
  • Tags ausentes

Ata

A discussão rodou em torno do comportamento esperado tanto para o conversor quanto para os EAIs.

Foi identificado que os EAIs se comportam de maneira diferente em relação a esses itens, porém ainda não existe certeza sobre os comportamentos atuais.

O conversor está retirando as tags vazias ou nulas.

Conclusões

Chegamos às seguintes definições:

  • Tags Vazias
    • Uma tag vazia sempre tem o significado de string vazia, não podendo, assim, ser desserializada para variáveis de tipos diferentes de string.
    • Seguem exemplos abaixo de comportamento do conversor:
      • Variável String:

        XML
        <name/>
        <name2></name2>
        JSON
        {
        	"name" : "",
        	"name2": ""
        }
      • Variável boolean, data ou numérica

        XML
        <date/>
        <number></number>
        Erro
        {      code: "Precisamos definir o código identificador",      message: "Não foi possível desserializar a mensagem. A propriedade 'date' esperava um tipo datetime, mas recebeu string",      helpUrl: "http://tdn.totvs.com/linkcomdetalhesdoerro",      detailedMessage: "Texto contendo a exception gerada"}
  • Tags nulas
    • Uma tag nula é considerada um valor aceitável.
    • O comportamento/significado desse valor vai depender da implementação de quem o recebeu.
      • Adapters podem zerar o valor, ou até mesmo substituir por um valor default
      • O conversor irá manter o valor de nulo em ambos os formatos.
    • Seguem exemplos abaixo de comportamento do conversor:

      XML
      <prop xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
      JSON
      {
      	"prop": null
      }
  • Tags Ausentes
    • O comportamento/significado de não existir uma determinada tag no corpo da mensagem vai depender da implementação de quem o recebeu.
      • Adapters podem zerar o valor, ou até mesmo substituir por um valor default
      • Conversor transcreve exatamente como recebeu. Ou seja, se uma tag não veio no XML, a mesma também não irá existir em JSON.

Ações


  • Sem rótulos