Does anyone know of a creative way to serialize objects that implement IDictionary? ...without implementing a new class?
I take it you mean you have to serialize a dictionary that's part of class you have no control over?
In short, you have to serialize the keys and values separately. To deserialize, step through each item in the key/value arrays and add them back to your dictionary.
You can use the System.Runtime.Serialization.DataContractSerializer
, with ReadObject
and WriteObject
the same way as you would do Deserialize
and Serialize
.
It works like a charm.
If the class implementing IDictionary
is serializable (like Dictionary<K,V>) and K
and V
are serializable then the standard .NET serialization mechanisms should work.
If the class implementing IDictionary
is serializable but K
and V
are then you could use two arrays to serialize the keys and associated values separately:
// 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]);