Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CrazyHT Blog

Ex-MVP C#.NET
Serialisation XML et Dictionary Typé
Dans un de mes projets j'ai eut besoin de typé une collection de type Dictionary (jusque la pas de problème me direz vous), mais surtout cette classe devait être Serialisable pour passer par un Web Service ou un Remoting. Et la les choses se corsent, en effet mon premier réflexe consiste à mettre l'attribut [Serializable] sur ma classe. Mais voila, le framework me renvoie une erreur m'expliquant qu'un Dictionary ne peut être sérialisé. Je me dis donc que si les automatismes du framework ne sont pas applicables, je vais implémenter la fonctionnalité à l'ancienne en implémentant l'interface "ISerializable". Chose dite, chose faite :
 
public class FieldInfoCollection : DictionaryBase, ISerializable
{
private SerializationInfo m_serializationInfo;
 
protected FieldInfoCollection(SerializationInfo info, StreamingContext context)
{
m_serializationInfo = info;
}
 
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
{
throw new ArgumentNullException("info");
}
}
 
// Le reste de mon implémentation (rien à voir avec la sérialisation)
}
 
Et la après les premiers tests de sérialisation qui sont concluant, je me rends compte que si la sérialisation binaire fonctionne, ce n'est pas le cas de la version XML (J'ai donc un remoting ok et mon web service toujours aussi peut concilient.
 
Quelques minutes plus tard et une recherche sur google plus loin, j'apprends qu'une interface au doux nom de "IXmlSerializable" pourrait m'aider dans ma quête. Un rapide coup d'œil au MSDN m'apprends qu'on est pas sensé s'en servir dans notre code (?????), mais de toute façon je suis plus à une entorse prés. Alors voyons le code qui en découle :
 
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
reader.Read(); // move past container
while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
FieldInfo value = (FieldInfo)new XmlSerializer(typeof(FieldInfo)).Deserialize(reader);
reader.MoveToContent();
Add(value);
}
}
public void WriteXml(System.Xml.XmlWriter writer)
{
foreach (object val in Values)
{
new XmlSerializer(typeof(FieldInfo)).Serialize(writer, val);
}
}
 
Et la, ohhhh miracle, mon dico se sérialise enfin en XML comme en binaire. Evidement, FieldInfo qui est l'objet connu par celui-ci est lui-même sérialisable.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 25 avril 2005 15:31 par crazyht
Classé sous :

Commentaires

crazyht a dit :

Je suis tombé sur le même probleme avec Hashtable il y a un peu de temps, et voici ce que j'ai fait...

http://blogs.metapropeller.com/klisa/PermaLink,guid,f70867c4-59a3-4a2b-b104-032b960c339d.aspx
# avril 25, 2005 17:17

crazyht a dit :

En effet, ta solution est plus courte, mais je preferais pouvoir gérer la serialisation de mes collections comme tout le reste de mes objets.
# avril 25, 2005 20:37

crazyht a dit :

il faux avoir des textes scientifiques qui repond aux besoins de l'utilisateur
# juillet 12, 2005 10:15
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- SQL Server 2008 : Un livre en cours de préparation ! par SQL Server vu par Christian Robert le il y a 3 heures et 47 minutes

- IIS7 : à quel pool d'application correspond le processus w3wp.exe par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 4 heures et 44 minutes

- PDC 2008 - J-14 ! par Nix's Blog le il y a 6 heures et 29 minutes

- [Silverlight] La version finale de Silverlight 2 sera disponible en téléchargement demain ! par Thomas Lebrun le il y a 8 heures et 22 minutes

- SharePoint 2007 : Professional Developers Conference 2008 par Philippe Sentenac [MVP SharePoint] le il y a 14 heures et 15 minutes

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35