ogni volta che provo per serializzare dizionario ottengo l'eccezione:Problemi con JSON Serialize dizionario <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
mio Testcase è:
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
}
}
Naturalmente potrei usare .ToString() ogni volta che inserire qualcosa nel dizionario, ma dal momento che è usato abbastanza spesso in metodi rilevanti per le prestazioni, preferirei usare l'enum.
La mia unica soluzione è usare .ToString() e convertire prima di entrare nelle regioni critiche per le prestazioni, ma è maldestro e dovrei cambiare la mia struttura di codice solo per poter serializzare i dati.
Qualcuno ha un'idea di come potrei serializzare il dizionario come <Enum, Int32>
?
Uso System.Web.Script.Serialization.JavaScriptSerializer per la serializzazione.
UPDATE:
sono passato a Dictionary<String, Int32>
ora e funziona, ma spero che qualcuno mostra una soluzione in quanto non ho davvero come l'utilizzo di stringhe al posto di un tipo enum sicura.
possibile duplicato (http: // StackOverflow.it/questions/5597349/how-do-i-convert-a-dizionario-a-un-json-string-in-c) –