Saltar al contenido

Serialización xml – Ocultar null valores

Después de tanto trabajar pudimos hallar el arreglo de este asunto que tantos lectores de este sitio han presentado. Si quieres aportar algo más puedes compartir tu conocimiento.

Solución:

Puedes crear una función con el patrón. ShouldSerializePropertyName que le dice al XmlSerializer si debe serializar el miembro o no.

Por ejemplo, si su propiedad de clase se llama MyNullableInt podrías tener

public bool ShouldSerializeMyNullableInt() 

  return MyNullableInt.HasValue;

Aquí hay una muestra completa

public class Person

  public string Name get;set;
  public int? Age get;set;
  public bool ShouldSerializeAge()
  
    return Age.HasValue;
  

Serializado con el siguiente código

Person thePerson = new Person()Name="Chris";
XmlSerializer xs = new XmlSerializer(typeof(Person));
StringWriter sw = new StringWriter();
xs.Serialize(sw, thePerson);

Da como resultado el siguiente XML: observe que no hay edad


  Chris

Además de lo que escribió Chris Taylor: si tienes algo serializado como un attributepuede tener una propiedad en su clase llamada PropertyNameSpecified para controlar si debe ser serializado. En codigo:

public class MyClass

    [XmlAttribute]
    public int MyValue;

    [XmlIgnore]
    public bool MyValueSpecified;

Existe una propiedad llamada XmlElementAttribute.IsNullable

Si la propiedad IsNullable se establece en trueel xsi:nil attribute se genera para los miembros de la clase que se han establecido en un null referencia.

El siguiente ejemplo muestra un campo con el XmlElementAttribute aplicado a él, y la propiedad IsNullable establecida en false.

public class MyClass

   [XmlElement(IsNullable = false)]
   public string Group;

Puedes echar un vistazo a otros XmlElementAttribute para cambiar nombres en serialización, etc.

Si te animas, tienes el poder dejar una noticia acerca de qué le añadirías a este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *