Sérialisation XML d'un Dictionary
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:
Citation:
NotSupportedException: Le type FooBar n'est pas pris en charge, car il implémente IDictionary.
Pourtant la classe Dictionary<TKey, TValue> a l'attribut Serializable, et implémente ISerializable !!!
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:
Code:
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(); |
Ce code s'éxécute sans problème, mais là, surprise...
Code:
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 ?