6

プロパティ セッターを使用して C# クラスの入力を検証し、無効な入力に対して例外をスローします。また、Json.NET を使用して、json をオブジェクトに逆シリアル化します。問題は、セッターによってスローされる無効な 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'}");
    }    
}
4

1 に答える 1

10

オブジェクトのデシリアライズ中にエラーをサブスクライブする必要があります。

            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メソッドから再スローされます。JsonSerializationException(" Error setting value to 'number' ")でラップされます。

于 2012-12-06T10:03:28.557 に答える