2010-03-12 4 views
0

public class SerializableDictionary : Dictionnaire, IXmlSerializable afin de sérialiser un dictionnaire. Cependant, cela ne marche pas quand j'ai des collelctions comme des valeurs (par exemple List) ou des types autres que les types primitifs (par exemple int, double, string ....). Ma question est de savoir quels types TKey, TValue impliquent ou peuvent contenir, et s'il y a moyen d'avoir un dictionnaire sérialisable dont les collections sont des valeurs.Aide avec XML SerializableDictionary en C#

Répondre

0

Consultez Xml Serializable Generic Dictionary pour une fonctionnalité comme celle-ci ... Chaque sous-élément doit être XmlSerializable.

Je sais que cela ne répond pas directement à votre question, mais le document MSDN est un déchet pour cette classe. Donc, personnellement, je ne l'utiliserais pas jusqu'à ce que ce soit un peu plus utile.

+0

Oui, j'utilise déjà ce morceau de code. Mon problème est que chaque fois que j'ai besoin de vérifier le type de la valeur dans le dictionnaire et si j'ai une valeur de type Liste j'ai besoin de créer un XMLSerializer de ce type sinon je crée un XMLSerializer du type générique TValue. Donc je me demande s'il existe un type vraiment générique pour contenir à la fois les ions et T. Je lis quelque part que je peux surcharger le type générique et définir mon propre type générique comme: MyType, MyType , MyType mais je m Je ne sais pas exactement comment cela fonctionne. – panipsilos

+0

Si je vous comprends bien ce que vous voulez faire est défini une nouvelle classe IList avec la contrainte que T est IXmlSerializable. Ensuite, vous pouvez également implémenter IXmlSerializable pour la classe IList et le faire fonctionner de la même manière que ce dictionnaire. – Ian

+0

Eh bien pas exactement. Je veux implémenter un dictionnaire sérialisable qui contient comme valeurs les deux collections (par exemple la liste ) et les valeurs de type T (par exemple, double, int, string ...). La version du serializableDictionary que j'ai maintenant peut contenir seulement le premier ou le dernier, mais pas les deux en même temps. Pour y parvenir, j'ai besoin, pour chaque valeur que je sérialise, de vérifier son type, puis d'instancier explicitement un nouveau XMLserializer de ce type. Je préfère le faire en instanciant un XMLserializer de type générique "MyType" qui peut contenir les deux types (collections, et T) si c'est possible. – panipsilos