Newtonsoft.Json.DeserializeObject抛出什么exception?
Newtonsoft.Json.DeserializeObject抛出什么exception? 我想要处理它们。
http://james.newtonking.com/json/help/?topic=html/M_Newtonsoft_Json_JsonConvert_DeserializeObject.htm#seeAlsoToggle
JSON.NET定义了以下例外:
JsonException
-
JsonReaderException
-
JsonSerializationException
-
JsonWriterException
-
JsonSchemaException
-
序列化或反序列化错误通常会导致JsonSerializationException
。
请注意, Json.NET的error handling文档显示了一个API用户通过处理错误事件而不是直接捕获exception来处理错误的策略。 当你考虑到可能只有一个数组中的某个项目可能无法反序列化时,这是有道理的,你可能想要以比整个集合中的一个整体exception更细化的方式处理这个问题。
这个答案解决了“想要处理它们”这个问题的一部分,而没有得到“什么是例外”部分。 正如另一个答案所示,所有的Json.NETexceptioninheritance自JsonException类 ,所以捕获这将是一个很好的故障安全。 但是,如果你想真正理解是什么引发了一个exception被抛出,你需要阅读它的Message
属性,而不是基于Exception
types来处理,因为不同的types似乎更关注于你所处理的动作performance比错误类别。 在示例代码中, args.ErrorContext.Error
是一个Exception
types。
文档中的示例代码:
List<string> errors = new List<string>(); List<DateTime> c = JsonConvert.DeserializeObject<List<DateTime>>(@"[ '2009-09-09T00:00:00Z', 'I am not a date and will error!', [ 1 ], '1977-02-20T00:00:00Z', null, '2000-12-01T00:00:00Z' ]", new JsonSerializerSettings { Error = delegate(object sender, ErrorEventArgs args) { errors.Add(args.ErrorContext.Error.Message); args.ErrorContext.Handled = true; }, Converters = { new IsoDateTimeConverter() } }); // 2009-09-09T00:00:00Z // 1977-02-20T00:00:00Z // 2000-12-01T00:00:00Z // The string was not recognized as a valid DateTime. There is a unknown word starting at index 0. // Unexpected token parsing date. Expected String, got StartArray. // Cannot convert null value to System.DateTime.