問題每當我試圖序列字典我得到異常:使用JSON序列化字典<Enum, Int32>
System.ArgumentException: Type
'System.Collections.Generic.Dictionary`2[[Foo.DictionarySerializationTest+TestEnum, Foo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'
is not supported for serialization/deserialization of a dictionary,
keys must be strings or object
我的測試用例是:
public class DictionarySerializationTest
{
public enum TestEnum { A, B, C }
//tried with numbers, too: public enum TestEnum { A = 1, B = 2, C = 3 }
public void SerializationTest()
{
Dictionary<TestEnum, Int32> data = new Dictionary<TestEnum, Int32>();
data.Add(TestEnum.A, 1);
data.Add(TestEnum.B, 2);
data.Add(TestEnum.C, 3);
JavaScriptSerializer serializer = new JavaScriptSerializer();
String result = serializer.Serialize(data);
// Throws
}
public void SerializationToObjectTest()
{
Dictionary<object, Int32> data = new Dictionary<object, Int32>();
data.Add(Enum.ToObject(typeof(TestEnum), TestEnum.A), 1);
data.Add(Enum.ToObject(typeof(TestEnum), TestEnum.B), 2);
data.Add(Enum.ToObject(typeof(TestEnum), TestEnum.C), 3);
JavaScriptSerializer serializer = new JavaScriptSerializer();
String result = serializer.Serialize(data);
// Throws
}
public void SerializationStringTest()
{
Dictionary<String, Int32> data = new Dictionary<String, Int32>();
data.Add(TestEnum.A.ToString(), 1);
data.Add(TestEnum.B.ToString(), 2);
data.Add(TestEnum.C.ToString(), 3);
JavaScriptSerializer serializer = new JavaScriptSerializer();
String result = serializer.Serialize(data);
// Succeeds
}
}
當然,我可以使用的ToString(中)每當我在Dictionary中輸入一些內容,但由於它在性能相關的方法中經常使用,我寧願使用枚舉。
我唯一的解決方案是使用的ToString(),並進入業績的關鍵區域之前轉換,但就是麻煩,我不得不改變我的代碼結構,只是爲了能夠序列化的數據。
有沒有人有一個想法如何,我可以序列化字典作爲<Enum, Int32>
?
我使用System.Web.Script.Serialization.JavaScriptSerializer進行序列化。
UPDATE:
我現在切換到Dictionary<String, Int32>
和它的作品,但我希望有人顯示解決方案,我真的不喜歡到位類型安全枚舉的使用字符串。
的可能重複(HTTP://計算器。COM /問題/ 5597349 /怎麼辦,我變頻-A-字典至A-JSON字符串,在-C) – 2014-03-07 16:39:57