Есть некий апи сервис который отдает Json объекты.
Сервис построен таким образом, что статс 200(OK) может вернуть нужный мне объект, а может вернуть объект ошибки следующего формата { "error": "<error message>" }
public class ApiError
{
[JsonProperty("error")]
public string Message { get; set; }
}
Мне необходимо проверить какой именно объект вернул сервер, и вернуть true or false , а также свой обственный объект ошибки (он буде отличаться от вышеуказанного).
Вот мой пример кода
private bool IsError(out Error error)
{
var apiError = JsonConvert.DeserializeObject<ApiError>(json);
if (apiError.Message != null )
{
error = new Error(apiError.Message);
return true;
}
else
{
error = null;
return false;
}
}
Проблема в том, что когда приходит не объект ошибки, приложение крашится с ошибкой сериализации. Я так понимаю нужен какойту универсальный метод
Можно попробовать спарсить в JObject
var ob =JObject.Parse("{ \"message\": \"<simple message>\" }");
var isError = ob.Properties().Any(x=>x.Name == "error");
Console.WriteLine(isError);
ob = JObject.Parse("{ \"error\": \"<error message>\" }");
isError = ob.Properties().Any(x => x.Name == "error");
Console.WriteLine(isError);
Вариант с ContainsKey
var ob =JObject.Parse("{ \"message\": \"<simple message>\" }");
var isError = ob.ContainsKey("error");
Console.WriteLine(isError);
ob = JObject.Parse("{ \"error\": \"<error message>\" }");
isError = ob.ContainsKey("error");
Console.WriteLine(isError);
Единственный вариант выполнить десериализация не нарвавшись на исключение- это выполнить ручную проверку того, что строка подходит по формату целевого объекта.
Например, воспользовавшись строковой функция Contains проверить, есть ли в строке поле еrror или нет.
Однако, я ничего не вижу ничего плохого, что бы получать и обрабатывать исключение.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости