cada vez que intento para serializar el diccionario Me da la excepción:Problemas con JSON Serialize Diccionario <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
Mi caso de prueba es:
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
}
}
Por supuesto que podría utilizar .ToString() cada vez que ingrese algo en el Diccionario, pero dado que se usa con bastante frecuencia en métodos relevantes para el rendimiento, preferiría usar la enumeración.
Mi única solución es utilizar .ToString() y convertir antes de entrar en las regiones críticas de rendimiento, pero eso es torpe y tendría que cambiar la estructura de mi código para poder serializar los datos.
¿Alguien tiene una idea de cómo puedo serializar el diccionario como <Enum, Int32>
?
Utilizo System.Web.Script.Serialization.JavaScriptSerializer para la serialización.
ACTUALIZACIÓN:
me cambió a Dictionary<String, Int32>
ahora y funciona, pero espero que alguien muestra una solución, ya que no me gusta mucho el uso de cadenas en lugar de un tipo de enumeración segura.
posible duplicado de (http: // stackoverflow.com/questions/5597349/how-do-i-convert-a-dictionary-to-a-json-string-in-c) –