How to serialize IDictionary

c#

Solution

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]);

Problem

Does anyone know of a creative way to serialize objects that implement IDictionary? ...without implementing a new class?

Original source