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