2009-04-24 6 views
4

J'ai une classe sérialisée dans un fichier XML. Il y a plusieurs propriétés qui sont rarement utilisées mais toujours créées. Si je les supprime dans le fichier XML, la désérialisation fonctionne toujours, car ils ont la valeur par défaut.Comment indiquer à C# d'omettre la création d'attributs par défaut lors de la sérialisation?

Ces attributs (bool) inutiles rendent le fichier XML plus difficile à lire. Puis-je demander à C# d'omettre les éléments ou les attributs qui ont encore une valeur par défaut?

Répondre

12

Spécifiez le DefaultValueAttribute et si la valeur correspond, il ne sera pas généré.

+0

'[System.ComponentModel.DefaultValue (false)]' l'a fait pour les valeurs bool - Merci :) – MrFox

0

Utilisez l'attribut XMLIgnore() pour marquer une propriété à intégrer dans Serialization/Deserialization.

+0

Non, cela ** l'exclut ** toujours; la question est de l'exclure quand il a la valeur par défaut. –

+1

Je pense que OP veut simplement ignorer les propriétés qui ont une valeur par défaut. Votre solution entraînerait toujours l'ignorance des propriétés. –

6

Rowland a la réponse pour des valeurs simples. Pour les scénarios plus complexes, vous pouvez ajouter une méthode appelée public bool ShouldSerializeFoo() (pour la propriété Foo) - elle renvoie false, elle ne sera pas sérialisée.

+0

Je voudrais juste mentionner le EditorBrowsableAttribute qui peut être utilisé pour empêcher les membres auxiliaires comme ceux-ci d'apparaître dans IntelliSense. –

+0

Au lieu de ShouldSerializeFoo(), une propriété FoolSpecified bool peut également être utilisée. –

+0

Si vous allez avec le * Spectre spécifié, vous devez vous rappeler de le marquer [XmlIgnore], IIRC –

Questions connexes