Probleme mit Json zu Serialisieren, Wörterbücher<Enum Int32>

immer wenn ich versuche zu serialisieren, das Wörterbuch, bekomme ich die exception:

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

Mein 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
  }

}

Natürlich, die ich verwenden könnte .ToString() auf, wenn ich geben Sie etwas in das Wörterbuch, aber da es sehr oft verwendet in der performance-relevanten Methoden würde ich lieber mit dem enum.

Meine einzige Lösung .ToString() und die Konvertierung, bevor Sie in die performance-kritischen Regionen, aber das ist umständlich und ich würde meine code-Struktur nur in der Lage sein zu serialisieren der Daten.

Hat jemand eine Idee, wie ich konnte serialisieren, die das Wörterbuch als <Enum, Int32>?

Ich das System nutzen.Web.Script.Serialisierung.JavaScriptSerializer für die Serialisierung.

UPDATE:

Wechselte ich zu Dictionary<String, Int32> jetzt und es funktioniert, aber ich hoffe, jemand zeigt eine Lösung, wie ich weiß nicht wirklich, wie die Verwendung von Zeichenfolgen in Ort eine typsichere enum.

InformationsquelleAutor Morfildur | 2010-05-23

Schreibe einen Kommentar