2016-09-08 7 views
0

Gibt es Möglichkeit, ungültiger JSer zu deserialisieren?newtonsoft json deserialization Fehlerbehandlung: teilweise Deserialisierung

Zum Beispiel wird als nächste JSON Deserialisierung nicht mit JsonReaderException

{ 
'sessionId': 's0j1', 
'commandId': 19, 
'options': invalidValue // invalid value 
} 

weil options Eigenschaftswert ist ungültig.

Gibt es eine gute Möglichkeit, sessionId und commandId Werte zu erhalten, auch wenn options Wert ungültig ist?

Ich weiß, es ist möglich, Fehler bei der Deserialisierung (http://www.newtonsoft.com/json/help/html/SerializationErrorHandling.htm)

var json = "{'sessionId': 's0j1', 'commandId': 19, 'options': invalidValue}"; 

var settings = new JsonSerializerSettings 
{ 
    Error = delegate(object sender, ErrorEventArgs args) 
    { 
     args.ErrorContext.Handled = true; 
    } 
}); 
var result = JsonConvert.DeserializeObject(json, settings); 

Bit zu handhaben es in result = null führen.

+0

wirft Ich glaube nicht, Json.NET ungültig Json verarbeiten kann. Wenn Sie etwas analysieren möchten, das nicht Json ist, sehen Sie sich [diese Antwort] an (http://stackoverflow.com/a/29146482/579895) – Pikoh

Antwort

2

Sie können es mit JsonReader tun.

Beispielcode:

var result = new Dictionary<string, object>(); 

using (var reader = new JsonTextReader(new StringReader(yourJsonStr)) 
{ 
    var lastProp = string.Empty; 
    try 
    { 
     while (reader.Read()) 
     { 
      if (reader.TokenType == JsonToken.PropertyName) 
      { 
       lastProp = reader.Value.ToString(); 
      } 

      if (reader.TokenType == JsonToken.Integer || 
       reader.TokenType == JsonToken.String) 
      { 
       result.Add(lastProp, reader.Value); 
      } 
     } 
    } 
    catch(JsonReaderException jre) 
    { 
     //do anything what you want with exception 
    } 
} 

Hinweis, dass es try..catch Block als wenn JsonReader ungültiges Zeichen trifft es JsonReaderException auf reader.Read()