Json.NET - 在反序列化期间在属性设置器中抛出异常

时间:2012-12-06 09:52:09

标签: c# json.net

我使用属性设置器来验证C#类中的输入,并在无效输入上抛出异常。我还使用Json.NET将json反序列化为对象。问题是我不知道在哪里捕获由setter抛出的无效json值的异常。 不会从JsonConvert.DeserializeObject方法抛出异常。

public class A{
    private string a;

    public string number{
        get {return a;}
        set {
            if (!Regex.IsMatch(value, "^\\d+$"))
                throw new Exception();
            a = value;
        }
    }
}

public class Main
{
    public static void main()
    {
         // The Exception cannot be caught here.
         A a = JsonConvert.DeserializeObject<A>("{number:'some thing'}");
    }    
}

1 个答案:

答案 0 :(得分:9)

您需要在反序列化对象时订阅错误:

            JsonConvert.DeserializeObject<A>("{number:'some thing'}",
            new JsonSerializerSettings
            {
                Error = (sender, args) =>
                {
                    Console.WriteLine(args.ErrorContext.Error.Message);
                    args.ErrorContext.Handled = true;
                }
            });

如果删除args.ErrorContext.Handled = true语句,则会从JsonConvert.DeserializeObject方法重新引发setter中引发的异常。它将包含在JsonSerializationException中(&#34;错误设置值为&#39;数字&#39;&#34;)。