Serializza dizionario usando JSON.net?

Sto cercando di usare JSON.net per serializzare un dizionario.

utilizzando

JsonConvert.SerializeObject(theDict); 

Ecco il mio risultato

 { "1": { "Blah1": false, "Blah2": false, "Blah3": "None", "Blah4": false }, "2": { "Blah1": false, "Blah2": false, "Blah3": "None", "Blah4": false }, "3": { "Blah1": false, "Blah2": false, "Blah3": "None", "Blah4": false }, ... ... ... } 

C’è un modo per serializzare questo dizionario in modo tale che le chiavi vengano visualizzate come variabili javascript valide?

Sono anche aperto ad altre strategie di serializzazione del dizionario.

Questo è il modo corretto per generare il JSON per Dictionary . Il motivo è che JSON richiede che tutte le chiavi siano letterali stringa-quotate .

JS è un po ‘più rilassato a questo riguardo: ma JSON è una forma limitata di valori letterali degli oggetti JS. In ogni caso, tutti i nomi di proprietà in JavaScript sono stringhe . (Sono convertiti implicitamente secondo necessità.) Quindi, ({1: 2})["1"]) e ({"1": 2})[1]) sono ugualmente validi in JS (ed entrambi valutano a 2 ), ma solo {"1": 2} è JSON valido.

Se il tipo di target da deserializzare è Dictionary allora si occuperà automaticamente delle conversioni nelle chiavi di int , IIRC.

Non sono a conoscenza di un modo per ottenere direttamente JSON.NET per generare non-JSON 😉 Si potrebbe fare con il looping del costrutto di primo livello, ad es. Ogni KeyValuePair e generare il JSON per ogni individuo voce insieme al codice JS “modificato”:

 foreach (var p in dict) { var k = p.Key; var v = p.Value; Emit(string.Format( "var name{0} = {1};", k, JsonConvert.SerializeObject(v))); } 

Dove Emit è usato per raccogliere l’output … Consiglierei “just normal JSON” se ansible, comunque.

Buona programmazione.