2013-09-25 12 views
7

JObject.Parse (jsonString) causa problemi ai dati booleani. per esempio. Il JSON è:Problema di parsing booleano Json.Net

{ 
    "BoolParam": true 
} 

ho usato il seguente codice per analizzare:

JObject data = JObject.Parse(str1); 
foreach (var x in data) 
{ 
    string name = x.Key; 
    Console.Write(name + " ("); 
    JToken value = x.Value; 
    Console.Write(value.Type + ")\n"); 
    Console.WriteLine(value); 
} 

Questa stampa il valore come: BoolParam (booleano): veri

Il caso cause di sensibilità problema come ho salvato questo json per un uso successivo. JSON salvato sembra

{ 
    "BoolParam": True 
} 

Tuttavia, quando più tardi lo uso, il JObject.Parse (str) throws errore come non valida JSON: carattere imprevisto rilevato durante l'analisi di valore: T. Path 'BoolParam', linea 2, posizione 15.

Se cambio il caso da "True" a "true", funziona. Non voglio aggiungere questo trucco per cambiare il caso al momento del salvataggio, ma c'è un modo migliore per gestire questo scenario.

risposta

5

Non voglio aggiungere questo trucco per cambiare il caso al salvataggio ma è un modo migliore per gestire questo scenario.

No, devi produrre JSON valido quando salvi se vuoi poterlo deserializzare in un serializzatore JSON come Newton JSON. Quindi correggere il percorso di salvataggio è il modo giusto per andare qui.

+0

Capisco che avrei dovuto salvare un json valido. La cosa che causa il problema è quando analizzo il valore come "Vero", ma una stringa Json valida si aspetta "true". Quindi, chiedendosi c'è un modo per analizzarlo come "vero" – surya

+1

@surya Se il tuo JSON contiene 'True', allora non è JSON valido; E 'così semplice. Il token 'true' DEVE essere tutto in minuscolo. Vedi la sezione 2.1 della [specifica JSON] (http://www.ietf.org/rfc/rfc4627.txt?number=4627). Come ha detto Darin, è necessario correggere il modo in cui si salva il JSON se si prevede che un parser possa leggerlo correttamente. –

+1

Ho aggiunto la correzione ma penso di non aver spiegato prima .. Non sono io a chi sta cambiando il valore booleano su "True" ma con parser Json.net. per essere precisi questa riga restituisce "True" per il valore booleano: JToken value = x.Value; string val = (value.ToString()); Il json è {"Bool": "true"} – surya