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