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属性,而不是基于Exceptiontypes来处理,因为不同的types似乎更关注于你所处理的动作performance比错误类别。 在示例代码中, args.ErrorContext.Error是一个Exceptiontypes。

文档中的示例代码:

 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.