2010-06-02 8 views
5

Ho un oggetto come questo,Come posso interrompere e svuotare i tag nel serializzatore 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;} 
} 

Ora, quando lo uso XmlSerializer su di esso e di strada e la città sono vuote ottengo questo nel output XML,

<Address /> 

c'è un non senso emetti questo tag vuoto?

Grazie

+2

Perché è necessario evitare i tag vuoti? Sono XML validi, no? –

risposta

3

È possibile implementare un metodo ShouldSerializeAddress per decidere se o meno la proprietà indirizzo deve essere serializzato:

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

Se il metodo esiste con questa firma, il serializzatore chiamerà prima di serializzare la proprietà.

In alternativa, è possibile implementare una proprietà AddressSpecified che ha lo stesso ruolo:

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

è possibile eliminare il valore vuoto con l'aggiunta di un attributo DefaultValue alla proprietà. Quando il valore della proprietà corrisponde al valore predefinito, non è serializzato. Impostare il valore predefinito su null, per eliminare la serializzazione. Ecco un esempio:


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

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

} 
0

Credo che l'assegnazione di valore nullo per affrontare campo dovrebbe funzionare.

Problemi correlati