Newtonsoft.Json.DeserializeObject抛出什么异常?我想处理它们。Newtonsoft.Json.DeserializeObject抛出什么异常?
45
A
回答
55
JSON.NET定义了以下情况除外:
JsonException
JsonReaderException
JsonSerializationException
JsonWriterException
JsonSchemaException
序列化和反序列化错误通常将导致一个JsonSerializationException
。
27
请注意,Json.NET's error handling documentation显示了一种API用户通过处理错误事件而不是直接捕获异常来处理错误的策略。当您考虑可能只有一个数组中的某个项目可能无法反序列化时,这是有道理的,您可能希望以比整个集合中的一个整体异常更细化的方式处理此问题。
这个答案解决了“想要处理它们”这个问题的一部分,而没有得到“什么是例外”部分。正如另一个答案所示,所有Json.NET异常从JsonException Class继承,因此捕获这将是一个很好的故障安全。然而,如果你想真正理解是什么导致抛出异常,你需要阅读它的Message
属性,而不是基于Exception
类型来处理,因为不同的类型似乎更关注于你所采取的动作表现比错误类别。在示例代码中,args.ErrorContext.Error
是Exception
类型。从文档
示例代码:
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.
相关问题
- 1. parseuser.SignUpAsync()抛出什么异常?
- 2. 什么是抛出异常
- 3. jsoup.element.select()抛出什么异常?
- 4. System.out.println()不抛出异常,但System.in.read()抛出异常,为什么?
- 5. 为什么抛出异常这么慢?
- 6. Netty异常处理 - Handler抛出异常,那么是什么?
- 7. 为什么Boolean.class.newInstance()抛出异常?
- 8. 为什么这抛出异常
- 9. 混淆什么时候抛出异常
- 10. 为什么BeanUtils.copyProperties会抛出IllegalArgument异常?
- 11. 什么情况会抛出异常“scala.util.control.BreakControl”?
- 12. 为什么重新抛出异常?
- 13. 抛出Task.ThrowIfExceptional的异常是什么?
- 14. 为什么Assert没有抛出异常
- 15. Java HSQL为什么抛出AbstractMethodError异常?
- 16. 枚举抛出concurrentModification异常。为什么?
- 17. 为什么异常不会被抛出?
- 18. 为什么抛出空指针异常?
- 19. 什么异常的类型抛出
- 20. 为什么Exception(str())抛出异常?
- 21. 为什么Mockito不会抛出异常?
- 22. ServerSocket.close()。它什么时候抛出异常?
- 23. 为什么Log4Net从不抛出异常
- 24. 为什么`JSON.parse`不抛出异常?
- 25. 为什么这会抛出异常?
- 26. 为什么geoip抛出异常?
- 27. 为什么Image.Save(Stream,ImageFormat)抛出异常?
- 28. 为什么Matcher.group抛出IndexOutOfBoundsException异常
- 29. 超时时抛出什么异常?
- 30. 为什么Hibernate抛出异常“java.lang.NoSuchMethodError:javax.persistence.UniqueConstraint.name()”?
谢谢,但 “典型地”?我怎样才能确定DeseriazeObject抛出哪些异常? – cja 2014-10-09 10:15:02
@cja,我认为*它总是会是'JsonSerializationException',但要确保您必须问作者或查看源代码......无论如何,如果您想成为“JsonException”一定不要错过任何东西,因为所有的JSON.NET异常都会从中继承。 – 2014-10-09 10:29:57
我认为例外需要妥善记录。 – KFL 2015-12-03 19:19:45