Как десериализовать данные с помощью Windows.Web.HttpClient?

Мне нужно получить список объектов, десериализованных из Json.

Моя проблема в том, что этот код висит в строке responseMessage = await httpClient.GetAsync(uri); Я проверил получение и ответ в Fiddler, я получаю Json в Fiddler, все имеет код 200 ОК, но по какой-то причине код не перемещается вперед на следующую строку при отладке в VS или нет, он просто зависает навсегда. Чего мне не хватает в этом коде, чтобы получить список объектов?

Поскольку код зависает в упомянутой строке, проблема должна быть где-то в HttpClient.

using (HttpClient httpClient = new HttpClient())
            {
                try
                {
                    var headers = httpClient.DefaultRequestHeaders;

                    HttpResponseMessage responseMessage;

                    responseMessage = await httpClient.GetAsync(uri);
                    responseMessage.Content.Headers.ContentType = new HttpMediaTypeHeaderValue("application/x-www-form-urlencoded; charset=UTF-8");

                    var content = responseMessage.Content.ReadAsStringAsync();


                    tvChannelList = JsonConvert.DeserializeObject<List<TvChannels>>(content.GetResults());

                    return tvChannelList;
                }
                catch (Exception ex)
                {
                    throw;
                }
            }

Заранее спасибо за любые подсказки.

2 ответа

Решение

Проблема была настолько несчастна, я забыл поставить await перед именем метода, который запрашивает данные из веб-службы, таким образом блокируя пользовательский интерфейс.

до

ListOfTvChannels = _remoteController.GetChannelListAsync();

после

ListOfTvChannels = await _remoteController.GetChannelListAsync();

Спасибо всем за попытку помочь.

Я использую этот метод при использовании HttpClient и хочу вернуть объект из ответа JSON.

    public async Task<TResult> MakeGetRequest<TResult>(string uri)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
            client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");

            HttpResponseMessage response = await client.GetAsync(uri);
            response.EnsureSuccessStatusCode();
            var data = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<TResult>(data);
        }
    }
Другие вопросы по тегам