Есть некий апи сервис который отдает 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 или нет.
Однако, я ничего не вижу ничего плохого, что бы получать и обрабатывать исключение.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть личный кабинет, при входе отображается имя пользователя и в скобочках его балас(считается в 1с) Как сделать чтобы баланс загружался после...
Впервые задумался над написанием модульного теста для проверки копирования и чтения файлов (Unit написал и использовал заглушки Moq), но не знаю...
Как мне получить файл который находится в определенной директории в АсеттБандле? директорию "snd2" я добавил в AssetBundle,теперь мне нужно из АссетБандла...