[英]newtonsoft json deserialization error handling: partial deserialization
有沒有辦法反序列化無效的json?
例如,下一個JSON反序列化將因JsonReaderException
而失敗
{
'sessionId': 's0j1',
'commandId': 19,
'options': invalidValue // invalid value
}
因為options
屬性值無效。
即使options
值無效,有沒有一種很好的方法來獲取sessionId
和commandId
值?
我知道在反序列化過程中可以處理錯誤( 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);
它會導致result = null
。
你可以用JsonReader
做到這JsonReader
。
示例代碼:
var result = new Dictionary<string, object>();
using (var reader = new JsonTextReader(new StringReader(yourJsonString)))
{
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
}
}
注意,有try..catch
塊,因為當JsonReader
遇到無效字符時,它會在reader.Read()
上拋出JsonReaderException
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.