2015-06-22 16 views
5

: Ich bin in C# Entwicklung,C# - JSON Serialisierung von Wörterbuch

In meinem Projekt versuche ich, durch die Serialisierung in eine Settings Lagerung mit diesem Code eine Dictionary Instanz zu speichern:

private static Dictionary<string, Dictionary<int, string>> GetKeys() 
{ 
    Dictionary<string, Dictionary<int, string>> keys = null; 
    try { 
     JavaScriptSerializer ser = new JavaScriptSerializer(); 
     keys = ser.Deserialize<Dictionary<string, Dictionary<int, string>>>(Settings.Default.keys); 
    } 
    catch (Exception e) 
    { 
     Debug.Print(e.Message); 
    } 
    return keys; 
} 

private static void SetKeys(Dictionary<string, Dictionary<int, string>> keys) 
{ 
    try 
    { 
     JavaScriptSerializer ser = new JavaScriptSerializer(); 
     Settings.Default.keys = ser.Serialize(keys); 
    } 
    catch (Exception e) 
    { 
     Debug.Print(e.Message); 
    } 
} 

Mein Probleme treten auf, wenn ich versuche, SetKeys Methode aufzurufen. Ein ThreadAbortException geworfen:

Eine erste Chance Ausnahme des Typs ‚System.Threading.ThreadAbortException‘ ist in mscorlib.dll aufgetreten Auswertung einen Thread vorübergehend ausgeführt werden muss. Verwenden Sie das Überwachungsfenster, um die Auswertung durchzuführen.

Haben Sie eine Idee, wie kann ich meinen Fehler beheben?

Dank

+3

Sie können auf diese aussehen wollen http : //stackoverflow.com/a/13754871/1099945 – gyosifov

+1

Serialisierung/Deserialisierung Wörterbücher sind immer eine Problemquelle. Ich würde vorschlagen, das Wörterbuch zu löschen und Ihre eigene Konfigurationssammlung zu erstellen, die https://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx erweitert, da dies eine verschlüsselte Sammlung ist, die auch eine Sammlung , die leicht serialisiert/deserialisiert werden kann. – Will

Antwort

3

Bessere Nutzung Json.NET, aber wenn Sie wollen JavaScriptSerializer verwenden:

Versuchen:

var json = new JavaScriptSerializer().Serialize(keys.ToDictionary(item => item.Key.ToString(), item => item.Value.ToString())); 

Oder:

string jsonString = serializer.Serialize((object)keys); 
+1

Json.NET hat mein Problem gelöst. Danke für Ihre Hilfe! – alex

Verwandte Themen