Как я могу десериализовать JSON, в то время как возвращает другой тип? - PullRequest
0 голосов
/ 27 сентября 2019

Я публикую некоторые данные на удаленном сервере.При успешном выполнении данных возвращается:

{"access_token":"sd234sd234sdf324","expires_in":7200}

При сбое возвращается:

{"errcode":40013,"errmsg":"invalid appid"}

Вот мой код:

    HttpClient HC = new HttpClient();
    HttpResponseMessage HRM = await HC.PostAsync("https://www.microsoft/callback/aaa/), null);
    string Content = await HRM.Content.ReadAsStringAsync();
    Models.SuccessModel SM=(Models.SuccessModel)JsonSerializer.Deserialize(Content, typeof(Models.SuccessModel));

Последнийчасть для преобразования JSON в класс, я еще использовал SuccessModel, но если он возвращает неудачный JSON, он выдаст ошибку неправильного типа.

Я знаю, что это за ошибка.Но как я могу справиться с этим?

Я хочу узнать, был ли он успешным или неудачным, и получить его значение.

Спасибо.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Тем не менее, вы можете работать таким образом

public class Model
{
    public string access_token { get; set;}
    public long expires_in { get; set;}
    public int errcode { get; set;}
    public string errmsg { get; set;}
}

Так что просто получите ответ и проверьте код ошибки при его использовании, нет необходимости проверять, когда десериализовать

1 голос
/ 27 сентября 2019

Создайте другую модель для ошибки следующим образом:

public class ErrorModel
{
   public string errcode {get;set;}
   public string errmsg {get;set;}
}

Затем выполните следующее:

string response = await HRM.Content.ReadAsStringAsync();

if (response.Contains("access_token", StringComparison.OrdinalIgnoreCase))
{
    Models.SuccessModel successModel =(Models.SuccessModel)JsonSerializer.Deserialize(response, typeof(Models.SuccessModel));
} else
{
    ErrorModel erroModel = (Models.ErrorModel)JsonSerializer.Deserialize(response,typeof(Models.ErrorModel));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...