Я использую RestSharp для связи с REST-сервером и написал небольшую функцию-обертку для вызова
private T Get<T>(string restAdress) where T : new()
{
try
{
// throw new Exception(); // This one is caught
IRestClient restClient = new RestClient(settings.Value.HostToConnect).UseSerializer(new JsonNetSerializer()); // (1)
RestRequest restRequest = new RestRequest(restAdress);
IRestResponse<T> result = restClient.Get<T>(restRequest); // (2)
return result.Data;
}
catch (Exception e) // debugger wont stop here
{
// debugger wont stop here too
// code within this block is not executed
}
return null; // (3)
}
Поскольку я хочу использовать атрибуты Newtonsoft, я даю специальный (de) сериализатор (1).
public class JsonNetSerializer : IRestSerializer
{
public string Serialize(object obj) =>
JsonConvert.SerializeObject(obj);
public string Serialize(RestSharp.Parameter bodyParameter) =>
JsonConvert.SerializeObject(bodyParameter.Value);
public T Deserialize<T>(IRestResponse response) =>
JsonConvert.DeserializeObject<T>(response.Content); // (4)
public string[] SupportedContentTypes { get; } =
{
"application/json", "text/json", "text/x-json", "text/javascript", "*+json"
};
public string ContentType { get; set; } = "application/json";
public DataFormat DataFormat { get; } = DataFormat.Json;
}
При вызове службы REST и попытке получить результат (2) выдается Exception
в случае неудачной десериализации (4). Но Exception
не перехватывается блоком try-catch
. Я попытался отладить, но после броска отладчик продолжается в строке (3), catch
и запись в журнал с перехватом никогда не выполняется. Отладчик даже не остановится на catch (Exception e)
, он идет прямо от (4) к (3).
(Извините за не английский, заголовок окна гласит «Исключение - пользователь не обработан»)
Может кто-нибудь объяснить мне это поведение?