2010-06-02 12 views
5

que tienen un objeto como éste,¿Cómo detengo y vacío la etiqueta en el serializador XML?

public class UserObj 
{ 
    public string First {get; set;} 
    public string Last {get; set;} 
    public addr Address {get; set;} 

} 

public class addr 
{ 
    public street {get; set;} 
    public town {get; set;} 
} 

Ahora cuando uso XmlSerializer en él y de la calle y la ciudad están vacías consigo esto en la salida XML,

<Address /> 

es lo que no de manera salida esta etiqueta vacía?

Gracias

+2

¿Por qué necesita evitar las etiquetas vacías? Son XML válidos, ¿verdad? –

Respuesta

3

se puede implementar un método ShouldSerializeAddress para decidir si es o no la propiedad Dirección debe ser serializado:

public bool ShouldSerializeAddress() 
{ 
    return Address != null 
     && !String.IsNullOrEmpty(Address.street) 
     && !String.IsNullOrEmpty(Address.town); 
} 

Si el método existe con esta firma, el serializador llamará antes de serializar la propiedad.

Alternativamente, se puede implementar una propiedad AddressSpecified que tiene la misma función:

public bool AddressSpecified 
{ 
    get 
    { 
     return Address != null 
      && !String.IsNullOrEmpty(Address.street) 
      && !String.IsNullOrEmpty(Address.town); 
    } 
} 
0

puede eliminar el valor vacío mediante la adición de un atributo DefaultValue a la propiedad. Cuando el valor de la propiedad coincide con el valor predeterminado, no se serializa. Establece el valor predeterminado en nulo, para eliminar la serialización. Aquí hay un ejemplo:


using System.ComponentModel; 
public class UserObj 
{ 
    public string First {get; set;} 
    public string Last {get; set;} 

    [DefaultValue(null)] 
    public addr Address {get; set;} 

} 
0

Creo que asignar el valor nulo al campo de dirección debería funcionar.

Cuestiones relacionadas