Я использую метод 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
недвижимость , однако это не имело никакого значения.
Как я могу сделать исключение пузырьком и не оставаться внутри конструктора моего класса?
Почему бы не использовать простой аргумент guard, например if (json.isNullOrWhitespace), чтобы добавить новый аргументNullException()? –
Вы уверены, что проблема с настройкой исключения отладки VS? Я пробовал что-то вроде этого, и исключение «пузырится», как обычно. –
@IvanStoev Теперь я буду проверять настройки исключения отладки –