Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to serialize IDictionary

Tags:

c#

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

like image 627
Joe Davis Avatar asked Sep 01 '09 18:09

Joe Davis


People also ask

Can you serialize a dictionary C#?

NET objects is made easy by using the various serializer classes that it provides. But serialization of a Dictionary object is not that easy. For this, you have to create a special Dictionary class which is able to serialize itself. The serialization technique might be different in different business cases.

Can you serialize a dictionary unity?

Unity cannot serialize standard dictionaries. This means that they won't show or be edited in the inspector and they won't be instantiated at startup. A classic workaround is to store the keys and values in separate arrays and construct the dictionary at startup.

Is KeyValuePair serializable C#?

KeyValuePair<> class, but it does not properly serialize in a web service. In a web service, the Key and Value properties are not serialized, making this class useless, unless someone knows a way to fix this.


2 Answers

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]);
like image 192
dtb Avatar answered Nov 15 '22 11:11

dtb


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.

like image 28
Jon B Avatar answered Nov 15 '22 12:11

Jon B