[XML] La sérialisation qui peut tellement faire de choses

Publié le 20 mai 2009 par Jeremy.jeanson

C'est assez surprenant de voir que la classe XmlSerializer dispose de bon nombre de possibilités pour gérer finement un fichier XML mais qu'elle est totalement mésestimée... pas mal de monde pense qu'elle ne sert qu'à sérialiser ou dé-sérialiser un XML qui ne serra lisible que via .net.

Ceci est faut, faut!! et archi faux!.. enfin ce n'est pas ton sujet, pardon je m'égards.

Si l’on regarde bien le XmlSerializer et le namespace System.Xml.Serialization. Ils disposent d'attributs pouvant être ajoutés à une classe pour manager le comportement de l'objet lors de sa sérialisation.

Par exemple :
pour changer le nom d'un propriété de type énumération lors de sa sérialisation

Vb
<System.Xml.Serialization.XmlArrayItem("Menuitem")> 
Public Property Items() As ObservableCollection(Of MyMenuItem)

End Property
C#
[System.Xml.Serialization.XmlArrayItem("Menuitem")] 
public ObservableCollection<MyMenuItem> Items 
{ 
}

Changer le nom d'un nœud (donc le nom de la classe sérialisée):

Vb
<XmlRoot("Menuitem")> 
Public Class MyMenuItem 

End Class
C#
[XmlRoot("Menuitem")] 
public class MyMenuItem 
{
}

Interdire la sérialisation d'une propriété

Vb
<System.Xml.Serialization.XmlIgnore> 
Public Property ImageSource() As Image 

End Property 
C#
[System.Xml.Serialization.XmlIgnore] 
public ImageSource Image 
{
}

Enfin ce ne sont que des exemples, il y encore bien d'autres choses qui sont possible et qui peuvent rendre service dans System.Xml.Serialization.

Pour plus d’information comme toujours cela se passe sur la MSDN.