Json.NET DeserializeObject允许构造函数异常冒泡

本文关键字:异常 构造函数 NET DeserializeObject Json | 更新日期: 2023-09-27 18:03:25

我正在使用JsonConvert.DeserializeObject<T>(string value)方法从string中反序列化T类型的对象。

在自定义类(我试图反序列化)中,我对提供给构造函数的参数执行检查,并可以抛出ArgumentNullException。然而,该异常不会通过反序列化器冒泡到原始调用者,因此该异常在构造函数内部保持未处理状态。

这是我在helper类中使用的泛型方法:

public static T FromJsonString<T>(string json)
{
    try
    {
        return JsonConvert.DeserializeObject<T>(json);
    }
    catch(ArgumentNullException)
    {
        // Would like to handle exception here, but never reached
    }
}

我的类构造函数示例:

[JsonConstructor]
public Profile(string name, ...)
{
    if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException("name"); }
    // ...
}

我在调用DeserializeObject<T>()时尝试使用JsonSerializerSettings,例如Error属性,但是这没有区别。

如何使异常冒泡而不留在类的构造函数中?

Json.NET DeserializeObject允许构造函数异常冒泡

这个问题是由Visual Studio中断异常引起的,因为它被归类为"user-unhandled"。在调试> Windows>异常设置中,您可以更改哪些异常会中断,哪些不会。