Ao usar um serializador .NET Xml padrão, existe alguma maneira de ocultar todos os valores nulos? O abaixo é um exemplo da saída da minha classe. Não quero gerar números inteiros anuláveis se estiverem definidos como nulos.
Saída atual de XML:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myNullableInt p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />
<myOtherInt>-1</myOtherInt>
</myClass>
O que eu quero:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myOtherInt>-1</myOtherInt>
</myClass>
c#
.net
xml-serialization
Meditação de guru
fonte
fonte
Além do que Chris Taylor escreveu: se você tiver algo serializado como um atributo, poderá ter uma propriedade em sua classe nomeada
{PropertyName}Specified
para controlar se deve ser serializada. Em código:fonte
{PropertyName}Specified
atributos devem ser do tipo bool.Existe uma propriedade chamada
XmlElementAttribute.IsNullable
Se a propriedade IsNullable estiver configurada como true, o atributo xsi: nil será gerado para os membros da classe que foram configurados para uma referência nula.
O exemplo a seguir mostra um campo com o
XmlElementAttribute
aplicado a ele e a propriedade IsNullable definida como false.Você pode procurar outro
XmlElementAttribute
para alterar nomes na serialização etc.fonte
Você pode definir alguns valores padrão e isso impede que os campos sejam serializados.
fonte
Prefiro criar meu próprio xml sem tags geradas automaticamente. Nisto posso ignorar a criação de nós com valores nulos:
fonte
fonte
No meu caso, as variáveis / elementos anuláveis eram todos do tipo String. Então, eu simplesmente executei uma verificação e atribuí a eles string.Empty no caso de NULL. Dessa forma, me livrei dos atributos nil e xmlns desnecessários (p3: nil = "true" xmlns: p3 = "http://www.w3.org/2001/XMLSchema-instance)
fonte