2010-06-02 3 views
5

J'ai un objet comme celui-ci,Comment arrêter et vider une balise dans un sérialiseur 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;} 
} 

Maintenant, quand je l'utilise XmlSerializer sur elle et de la rue et de la ville sont vides, je reçois ce dans la sortie XML,

<Address /> 

Est-il possible de ne pas sortir cette étiquette vide?

Merci

+2

Pourquoi devez-vous éviter les étiquettes vides? Ce sont des XML valides, n'est-ce pas? –

Répondre

3

Vous pouvez mettre en œuvre une méthode ShouldSerializeAddress de décider si oui ou non la propriété Adresse doit être sérialisée:

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

Si la méthode existe avec cette signature, le sérialiseur appellera avant de sérialiser la propriété.

Vous pouvez également mettre en œuvre une propriété AddressSpecified qui a le même rôle:

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

Vous pouvez éliminer la valeur vide en ajoutant un attribut DefaultValue à la propriété. Lorsque la valeur de la propriété correspond à la valeur par défaut, elle n'est pas sérialisée. Vous définissez la valeur par défaut sur null pour éliminer la sérialisation. Voici un exemple:


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

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

} 
0

Je pense que l'affectation d'une valeur nulle au champ d'adresse devrait fonctionner.

Questions connexes