2009-09-01 8 views

Répondre

11

Si la classe est mise en œuvre IDictionary sérialisable (comme Dictionary<K,V>) et K et V sont sérialisable alors les mécanismes standards de sérialisation .NET devraient fonctionner.

Si la classe implémentant IDictionary est sérialisable mais K et V sont alors vous pouvez utiliser deux tableaux pour sérialiser les clés et les valeurs associées séparément:

// before serialization 
IDictionary<string,int> dict; 
string[] keys = dict.Keys.ToArray(); 
int[] values = dict.Keys.Select(key => dict[key]).ToArray(); 

// after deserialization 
IDictionary<string,int> dict = new Dictionary<string,int>(); 
for (int i = 0; i < keys.Length; i++) 
    dict.Add(keys[i], values[i]); 
+0

En raison de certains accesseurs fous que j'ai dans la classe, j'ai été incapable de mettre en œuvre cette solution particulière, mais c'était le type de solution créative que je cherchais ... donc je vais marquer cela comme la réponse. Merci! –

1

Je suppose que vous voulez dire que vous devez sérialiser un dictionnaire qui est une partie de la classe sur laquelle vous n'avez aucun contrôle?

En résumé, vous devez sérialiser les clés et les valeurs séparément. Pour désérialiser, parcourez chaque élément dans les tableaux de clés/valeurs et ajoutez-les à votre dictionnaire.

0

Vous pouvez utiliser le System.Runtime.Serialization.DataContractSerializer, avec ReadObject et WriteObject la même manière que vous le feriez Deserialize et Serialize. Cela fonctionne comme un charme.

+0

Sera-t-il sérialisé/désérialisé en ligne? Autrement dit, la sérialisation principale est xml, mais elle peut injecter juste pour la propriété IDictionary qui cause le problème? – toddmo

Questions connexes