Cuando uso un serializador .NET Xml estándar, ¿hay alguna forma de ocultar todos los valores nulos? El siguiente es un ejemplo de la salida de mi clase. No quiero generar los enteros anulables si están configurados como nulos.
Salida actual 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>
Lo que quiero:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myOtherInt>-1</myOtherInt>
</myClass>
c#
.net
xml-serialization
Meditación Gurú
fuente
fuente
Además de lo que escribió Chris Taylor: si tiene algo serializado como atributo, puede tener una propiedad en su clase nombrada
{PropertyName}Specified
para controlar si debe ser serializada. En codigo:fuente
{PropertyName}Specified
atributos tienen que ser de tipo bool.Existe una propiedad llamada
XmlElementAttribute.IsNullable
Si la propiedad IsNullable se establece en true, el atributo xsi: nil se genera para los miembros de la clase que se han establecido en una referencia nula.
El siguiente ejemplo muestra un campo con el
XmlElementAttribute
aplicado y la propiedad IsNullable establecida en falso.Puede echar un vistazo a otros
XmlElementAttribute
para cambiar los nombres en la serialización, etc.fuente
Puede definir algunos valores predeterminados y evita que los campos se serialicen.
fuente
Prefiero crear mi propio xml sin etiquetas autogeneradas. En esto puedo ignorar la creación de nodos con valores nulos:
fuente
fuente
En mi caso, las variables / elementos anulables eran todos de tipo String. Entonces, simplemente realicé una verificación y les asigné una cadena. Vacío en caso de NULL. De esta manera me libré de los atributos innecesarios nil y xmlns (p3: nil = "true" xmlns: p3 = "http://www.w3.org/2001/XMLSchema-instance)
fuente