Newtonsoft. Json.SerializeObject 抛出了什么异常?

什么异常是 Newton soft.Json.SerializeObject 抛出的? 我想处理它们。

Http://james.newtonking.com/json/help/?topic=html/m_newtonsoft_json_jsonconvert_deserializeobject.htm#seealsotoggle

99915 次浏览

JSON.NET 定义了以下例外情况:

    • JsonReaderException
    • JsonSerializationException
    • JsonWriterException
    • JsonSchemaException

序列化或反序列化错误通常会导致 JsonSerializationException

请注意,Json.NET 的错误处理文档显示了 API 用户通过处理错误事件而不是直接捕获异常来处理错误的策略。当您考虑到一个数组中可能只有一个项目无法反序列化时,这是有意义的,并且您可能希望以更细粒度的方式处理这个问题,而不是为整个集合处理一个单一异常。

这个答案回答了你问题中“想要处理它们”的部分,而没有回答“什么异常”的部分。正如另一个答案所显示的,所有 Json.NET 异常都是从 JsonException 类继承的,因此捕获这个异常将是一个很好的故障安全措施。然而,如果你想真正理解是什么导致了异常的抛出,你需要读取它的 Message属性,而不是基于 Exception类型的句柄,因为不同的类型似乎更多的面向你正在执行的操作而不是错误类别。在下面的示例代码中,args.ErrorContext.ErrorException的一个实例。

文档中的示例代码:

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.

它的 JsonReader 异常。

检查如下:

enter image description here

而且很容易处理

enter image description here

它是在 异常下处理的

catch (JsonReaderException)
{
//handle your exception here
}