Problèmes avec Json Serialize Dictionary & lt; Enum, Int32 & gt;

chaque fois que j'essaie de sérialiser le dictionnaire-je obtenir de l'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

Mon cas de test est:

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
  }

}

Bien sûr que je pourrais utiliser .ToString() à chaque fois que je entrez quelque chose dans le Dictionnaire, mais depuis il est utilisé assez souvent dans les performances des méthodes que je préfère, à l'aide de l'enum.

Ma seule solution est d'utiliser .ToString() et de la conversion avant d'entrer dans la critique pour les performances régions, mais c'est maladroit et je dois changer ma structure de code juste pour être en mesure de sérialiser les données.

Quelqu'un a une idée de comment je pourrais arranger le dictionnaire comme <Enum, Int32>?

- Je utiliser le Système.Web.Script.La sérialisation.JavaScriptSerializer pour la sérialisation.

Mise à JOUR:

Je suis passé à Dictionary<String, Int32> maintenant et il fonctionne, mais j'espère que quelqu'un montre une solution que je n'aime pas utiliser des chaînes de caractères à la place d'un type de coffre-fort enum.

source d'informationauteur dbemerlin