如何使用Windows.Web.HttpClient反序列化数据



我需要获得从Json反序列化的对象列表。

我的问题是,这段代码挂在responseMessage = await httpClient.GetAsync(uri);行,我在Fiddler中检查了get和response,在Fiddle中我得到了Json,所有的代码都是200 OK,但由于某种原因,无论是否在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;
                }
            }

提前感谢您的任何提示。

问题太愚蠢了,我忘记把await放在从web服务调用数据的方法名之前,从而阻塞了UI。

之前

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);
        }
    }

最新更新