Je voudrais contrôler sérialisation Xml sur chaque élément d'une liste, supposons que vous avez ceci:sérialisation conditionnelle sur chaque élément d'une liste
public class Item {
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("label")]
public string Label { get; set; }
#region Conditional serialization
public bool ShouldSerializeLabel()
{
return !string.IsNullOrEmpty(Label);
}
#endregion
}
public class Root {
[XmlArray("items")]
[XmlArrayItem("item")]
public List<Item> Items { get; set; }
#region Conditional serialization
// Suppose I have two items but one has no label,
// How to avoid this :
// <items>
// <item>
// <id>5</id>
// <label>5</label>
// </item>
// <item> // I don't want items without label in my collection, how to tell the XmlSerializer not to serialize them
// <id>4</id>
// </item>
// </items>
//
// But I still want to have to possibility to do that :
// <product>
// <item> // this item has no label and it's ok
// <id>42</id>
// </item>
// <price>1.99</price>
// </product>
#endregion
}
Comment dire un élément avec String.IsNullOrEmpty (étiquette) ne doit pas être sérialisé dans ma collection? Ma solution consiste à nettoyer la liste des éléments avant la sérialisation, mais existe-t-il un moyen de le faire de manière déclarative?
Vous devriez vous intéresser à l'implémentation de IXmlSerializable sur votre classe et effectuer une sérialisation/désérialisation personnalisée afin d'ignorer l'élément. Il n'y a pas d'attribut conditionnel dans le langage pour XmlSerializer qui va le faire. Une autre option consiste à faire une boucle sur votre collection d'éléments et à omettre les éléments avec une étiquette vide. –
Votre deuxième option est ma solution de contournement actuelle :) – hoang