Salut,
Pour une application, j'ai besoin de sérialiser en XML un objet de type Dictionary. Malheureusement le XmlSerializer refuse de sérialiser un IDictionary... on dirait même que c'est fait exprès, vu le message d'erreur:
Pourtant la classe Dictionary<TKey, TValue> a l'attribut Serializable, et implémente ISerializable !!!NotSupportedException: Le type FooBar n'est pas pris en charge, car il implémente IDictionary.
Comme je trouvais ça bizarre, j'ai creusé un peu... a priori sérialiser un Dictionary revient à sérialiser une collection de KeyValuePair, donc ça devrait pas être impossible. Par curiosité j'ai essayé de sérialiser un KeyValuePair:
Ce code s'éxécute sans problème, mais là, surprise...
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 KeyValuePair<string, string> kvp = new KeyValuePair<string, string>("clé", "valeur"); List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string>>(); lst.Add(kvp); StreamWriter wr = new StreamWriter(filename); XmlSerializer xs = new XmlSerializer(lst.GetType()); xs.Serialize(wr, lst); wr.Close();
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?xml version="1.0" encoding="utf-8"?> <ArrayOfKeyValuePairOfStringString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <KeyValuePairOfStringString /> </ArrayOfKeyValuePairOfStringString>
Le KeyValuePair sérialisé est vide ! Et je n'arrive pas à comprendre ça... pourtant ses 2 propriétés Key et Value sont publiques, et n'ont pas l'attribut XmlIgnore.
Avez-vous une explication à ça ? Ou encore mieux, une solution pour pouvoir sérializer un Dictionary ?
Partager