2015-06-22 18 views
5

Sono nuovo in C# sviluppo,C# - JSON serializzazione del dizionario

Nel mio progetto, io cerco di salvare un'istanza Dictionary dalla serializzazione in un deposito Settings con questo codice:

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); 
    } 
} 

mio i problemi si verificano quando provo a invocare il metodo SetKeys. Un ThreadAbortException è gettato:

Una prima eccezione di possibilità di tipo 'System.Threading.ThreadAbortException' in mscorlib.dll La valutazione richiede un thread per eseguire temporaneamente. Utilizzare la finestra di controllo per eseguire la valutazione.

Hai un'idea di come posso risolvere il mio errore?

Grazie

+3

si consiglia di guardare a questo http : //stackoverflow.com/a/13754871/1099945 – gyosifov

+1

Serializzare/deserializzare i dizionari sono sempre una fonte di problemi. Suggerirei di abbandonare il dizionario e creare la propria raccolta di configurazioni estendendo https://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx in quanto si tratta di una raccolta con chiave che è anche un Collezione , facilmente serializzabile/deserializzata. – Will

risposta

3

Migliore utilizzo Json.NET, ma se si desidera utilizzare JavaScriptSerializer:

Prova:

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

Oppure:

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

Json.NET ha risolto il mio problema. Grazie per l'aiuto! – alex

Problemi correlati