48 votes

Pourquoi XmlSerializer ne prend-il pas en charge les dictionnaires ?

Je suis juste curieux de savoir pourquoi Dictionary n'est pas pris en charge par XmlSerializer ?

Vous pouvez le contourner assez facilement en utilisant DataContractSerializer et écrire l'objet dans un XmlTextWriter mais quelles sont les caractéristiques d'un dictionnaire qui font qu'il est difficile pour une personne d'avoir accès à des informations. XmlSerializer à gérer étant donné qu'il s'agit en fait d'un tableau de KeyValuePairs.

En fait, vous pouvez passer un IDictionary<TKey, TItem> à une méthode qui attend un IEnumerable<KeyValuePairs<TKey, ITem>> .

32voto

leppie Points 67289

Les tables de hachage ont généralement besoin de fournisseurs de hashcode et de comparateurs d'égalité. Ceux-ci ne peuvent pas être sérialisés facilement en XML, et ne seront certainement pas portables.

Mais je pense que vous avez déjà trouvé votre réponse. Il suffit de sérialiser la table de hachage comme un List<KeyValuePair<K,V>> et ensuite le (re)construire dans une table de hachage.

7voto

Nich Overend Points 421

C'est un peu tard - mais j'ai trouvé cette question en cherchant moi-même la réponse, et j'ai pensé partager ma réponse finale qui a été de remplacer XmlSerializer par un autre qui sérialise tout.

http://www.sharpserializer.com

Il a fonctionné pour moi dès sa sortie de la boîte, en sérialisant des dictionnaires, et des types personnalisés multicouches, et même Genetics en utilisant des interfaces comme arguments de type. Il dispose également d'une licence entièrement permissive.

Merci Pawel Idzikowski !

2voto

Jeremy Points 481

Je crois que la question portait davantage sur le raisonnement que sur la réponse. Je pense que ce post fournit une perspective plus complète : StackOverflow 1124597

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X