2014-09-29 18 views
33

Ho un oggetto con struttura di dati predefinita:Ignora errori di analisi durante dati Json.NET parsing

public class A 
{ 
    public string Id {get;set;} 
    public bool? Enabled {get;set;} 
    public int? Age {get;set;} 
} 

e JSON si suppone che sia

{ "Id": "123", "Enabled": true, "Age": 23 } 

voglio gestire errori JSON in modo positivo e ogni volta che il server restituisce valori imprevisti per tipi di dati definiti, desidero che sia ignorato e il valore predefinito sia impostato (null).

In questo momento, quando JSON è parzialmente invalido mi sto eccezione lettore JSON:

{ "Id": "123", "Enabled": "NotABoolValue", "Age": 23 } 

E non c'è niente di oggetto a tutti. Quello che voglio è quello di ottenere un oggetto:

new A() { Id = "123", Enabled = null, Age = 23 } 

e l'analisi di avvertimento, se possibile. È possibile eseguire con JSON.NET?

risposta

61

Per poter gestire gli errori deserializzazione, utilizzare il codice seguente:

var a = JsonConvert.DeserializeObject<A>("-- JSON STRING --", new JsonSerializerSettings 
    { 
     Error = HandleDeserializationError 
    }); 

dove HandleDeserializationError è il seguente metodo:

public void HandleDeserializationError(object sender, ErrorEventArgs errorArgs) 
{ 
    var currentError = errorArgs.ErrorContext.Error.Message; 
    errorArgs.ErrorContext.Handled = true; 
} 

Il HandleDeserializationError sarà chiamato tante volte quante sono errori nella stringa JSON. Le proprietà che causano l'errore non verranno inizializzate.

+1

funziona semplicemente alla grande. Questo è esattamente quello che stavo cercando! Grazie –

+17

Nota che ErrorEventArgs è Newtonsoft.Json.Serialization.ErrorEventArgs e non System.IO.ErrorEventArgs. –

+0

Eccellente! Questo lavoro! – Yonedev

Problemi correlati