SAGA 5: sérialisation XML
Par amethyste le Sep 18, 2008 | Dans focus | 1 réaction »
De retour de vacances pour rédiger ce qui sera sans doute le dernier de la série.
Au programme d'aujourd'hui:
• Utilisation de certains attributs mals connus
• Comment personnaliser la sérialisation
Dans le deuxième opus de cette saga on a vu comment on pouvait gérer la présence d'éléments inattendus à l'aide de nouveaux événements de XmlSerializer.
Une méthode alternative plus ancienne est basée sur les deux attributs XmlAnyAttributeAttribute et XmlAnyElementAttribute que l'on applique à un membre retournant un tableau de XmlNode ou de XmlElement voire XmlAttribute.
La différence essentielle entre les deux attributs est que le premier ne concerne que les attributs (au sens XML) inattendus, tandis que le deuxième concerne les éléments. A ceci près, le fonctionnement est identique.
Sachez aussi que l'utilisation de ces attributs déconnecte l'appel aux événements UnknownNode et UnknownAttribute.
Un détail que j'ai mis un moment à comprendre avec XmlAnyAttribute est que les attributs dont on parle sont ceux de la classe mère à laquelle appartient le membre déclaré avec cet attribut. Par exemple si je désérialise une classe Pays avec le fichier:
<Pays feteNationale="14 juillet" > <Nom langueOfficielle="français">France</Nom> <Capitale>Paris</Capitale> </Pays>
Je vais lire feteNationale, mais pas langueOfficielle.
Pour des raisons que j'ignore, les dictionnaires génériques ne sont pas nativement sérialisables en .NET. C'est ennuyeux car on les rencontre fréquemment. C'est ici qu'intervient l'interface IXmlSerializable qui permet de personnaliser la sérialisation.
Cette interface expose deux méthodes: ReadXml() et WriteXml(). Elles fournissent toutes deux un reader et un writer. Ces méthodes ne sont pas spécialement difficiles à utiliser c'est pourquoi je vais aller assez vite dessus.
Vous trouverez un exemple de dictionnaire générique sérialisable sur le blog de Paul Welter [1]. J'ai déjà testé ce code dans des applications et il fonctionne correctement.
La semaine prochaine on va parler de localisation. J'ai un peu souffert la dessus cet été!
Bibliographie
[1] Ecriture d'un dictionnaire générique sérialisable:
http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
Notes d'ailleurs
Les contraintes sont parfois aussi un puissant moyen de stimuler l'imagination et le talent.
Certaines contraintes sont naturelles.
Il existe par exemple un phénomène très rare (peut être unique) en Croatie où l'île de Mljet est la seule île connue à abriter elle-même un îlot, une île dans une île!
C'est sur cette île que la légende voudrait qu'Ulysse fût retenu par la nymphe Calypso.
D'autres sont humaines et forcent d'autant plus l'admiration.
On ne saura jamais quelle était exactement la voix de la belle-sœur de Mozart pour laquelle il écrivit le fameux air de la Reine de la Nuit. Mais on connait celle de Lucia Popp qui a chanté la version de référence (selon moi en tout cas) de cet air plein de rage et de vengeance:
http://fr.youtube.com/watch?v=_ufeyarJxNQ
Morceau qui nécessite agilité vocale et puissance données à peu de sopranos.
En littérature lorsque l'on parle de contraintes, c'est Perec qui vient tout de suite à l'esprit.
Le très délicat "La Vie Mode d'Emploi" à la précision mathématique certes, mais que dire de "La Disparition" qui n'utilise jamais la lettre E, lettre qui revient dans "Les revenentes", mais cette fois ce sont les autres voyelles qui disparaissent!
Pierre Benoît, auteur ambigu, avait pour habitude de donner à ses héroïnes un prénom commençant par la lettre A. Le même Perec le cite dans son "Je me souviens".
Pour information, P. Benoit situe l'Atlantide dans le Sahara (aah, Antinea!).
Et puis si vous êtes joueur, cette rentrée littéraire nous propose un roman de Mathias Enard (Zone) de 517 pages. La première phrase fait exactement ... 517 pages! La phrase la plus longue de Proust ne fait que 243 mots par comparaisons.
Je dirai qu'il est prudent de ne pas tenter ça au BAC.
1 commentaire
Je ne me souvenais pas que tu instillais de la literature entre une balise XML et un design pattern.
Laisser un commentaire
| « Retour sur le ViewState | SAGA 4: sérialisation XML » |