2016-09-08 37 views
0

無効なjsonをデシリアライズする方法はありますか? optionsプロパティの値が無効であるため、newtonsoft jsonデシリアライズエラー処理:部分デシリアライズ

たとえば、次のJSONデシリアライゼーションはJsonReaderException

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

で失敗します。

optionsの値が無効でも、sessionIdcommandIdの値を取得する良い方法はありますか?

は、私はそれはそれはresult = null

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

ビットをなり、デシリアライゼーション(http://www.newtonsoft.com/json/help/html/SerializationErrorHandling.htm)時のエラーを処理することが可能です知っています。

+0

JsonReaderExceptionを投げるようtry..catchブロックがあることが

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

注意、。 Json以外のものを解析する場合は、[この回答](http://stackoverflow.com/a/29146482/579895)を参照してください。 – Pikoh

答えて

2

JsonReaderで行うことができます。

例コード:JsonReaderは無効な文字を満たしたとき、それは私がJson.NETが無効なJSONを扱うことができるとは思わないreader.Read()

関連する問題