首页 > 解决方案 > 无法将 HttpResponseMessage 反序列化为模型对象

问题描述

  1. 获取代码Response

    public async Task<List<RepositoryListResponseItem>> MakeGitRequestAsync<T>(string url)
    {
        List<RepositoryListResponseItem> res = new List<RepositoryListResponseItem>();
        using (var httpClient = new HttpClient())
        {
            httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
            httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpFactoryTesting");
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    
    
            using (HttpResponseMessage response = await httpClient.GetAsync(url))
            {
                if (response.IsSuccessStatusCode == true)
                {
                    string apiResponse = response.Content.ReadAsStringAsync().Result;
                    res = JsonConvert.DeserializeObject<List<RepositoryListResponseItem>>(apiResponse);
                }
            }
    
        }
        return res;
    }
    
  2. 模型对象:

    public class RepositoryListResponseItem
    {
        [Description("Repo Name")]
        [JsonPropertyName("full_name")]
        public string RepoName { get; set; }
    
        [Description("Repo Link")]
        [JsonPropertyName("html_url")]
        public string RepoLink { get; set; }
    }
    
    1. HttpWebResponse 在我得到它之后的字符串(string apiResponse = response.Content.ReadAsStringAsync().Result

      [{\"id\":114995175,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMTQ5OTUxNzU=\",\"name\":\"AlcoholConsumption\",\"full_name\":\"ihri/AlcoholConsumption\",\....
      

我有 C#.NET 服务,我正在使用 GitHub API。我能够成功获取数据,但不幸的是格式不正确(请检查步骤 3)。我无法将响应转换为我的自定义对象)

在这里,响应是JSONarray准确的。

标签: c#jsonasp.net-corejson-deserialization

解决方案


根据您的Json结果,您的模型对象似乎需要是这样的:

public class RepositoryListResponseItem
{
    public int id { get; set; }
    public string node_id { get; set; }
    public string name { get; set; }
    public string full_name { get; set; }
}

另外我强烈建议您使用await关键字而不是Result

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

推荐阅读