2016-08-20 2 views
0

Я использую метод JsonConvert.DeserializeObject<T>(string value) для десериализации объекта типа T с string.Json.NET DeserializeObject разрешает исключение конструктора для пузырьков

В пользовательском классе (который я пытаюсь десериализовать) я выполняю проверки аргументов, предоставленных конструктору, и может вызывать ArgumentNullException. Однако это исключение не выливается через десериализатор и исходный вызывающий, и поэтому исключение остается необработанным внутри конструктора.

Это универсальный метод я использую в вспомогательном классе:

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"); } 
    // ... 
} 

Я попытался с помощью JsonSerializerSettings при вызове DeserializeObject<T>(), например Error недвижимость , однако это не имело никакого значения.

Как я могу сделать исключение пузырьком и не оставаться внутри конструктора моего класса?

+0

Почему бы не использовать простой аргумент guard, например if (json.isNullOrWhitespace), чтобы добавить новый аргументNullException()? –

+0

Вы уверены, что проблема с настройкой исключения отладки VS? Я пробовал что-то вроде этого, и исключение «пузырится», как обычно. –

+0

@IvanStoev Теперь я буду проверять настройки исключения отладки –

ответ

0

Проблема вызвана тем, что Visual Studio нарушает исключение, поскольку оно классифицируется как «пользовательский необработанный». В Debug> Windows> Exception Settings вы можете изменить, какие исключения прерываются, а какие нет.

 Смежные вопросы

  • Нет связанных вопросов^_^