无法将 HttpResponseMessage 反序列化为模型对象
Unable to Deserialize HttpResponseMessage to Model Object
获取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;
}
模型对象:
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; }
}
HttpWebResponse 在我得到字符串后 (string apiResponse = response.Content.ReadAsStringAsync().Result
)
[{\"id\":114995175,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMTQ5OTUxNzU=\",\"name\":\"AlcoholConsumption\",\"full_name\":\"ihri/AlcoholConsumption\",\....
我有 C#.NET 服务,我在其中使用 GitHub API。我能够成功获取数据,但不幸的是格式不正确(请检查步骤 3)。
我无法将响应转换为我的自定义对象)
这里,准确地说,响应是JSONarray
。
根据您的 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();
在对象类型
中使用您的自定义class
var jsonString = responseMessage.Content.ReadAsStringAsync().Result;
var myObject = JsonConvert.DeserializeObject<object>(jsonString);
获取
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; }
模型对象:
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; } }
HttpWebResponse 在我得到字符串后 (
string apiResponse = response.Content.ReadAsStringAsync().Result
)[{\"id\":114995175,\"node_id\":\"MDEwOlJlcG9zaXRvcnkxMTQ5OTUxNzU=\",\"name\":\"AlcoholConsumption\",\"full_name\":\"ihri/AlcoholConsumption\",\....
我有 C#.NET 服务,我在其中使用 GitHub API。我能够成功获取数据,但不幸的是格式不正确(请检查步骤 3)。 我无法将响应转换为我的自定义对象)
这里,准确地说,响应是JSONarray
。
根据您的 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();
在对象类型
中使用您的自定义classvar jsonString = responseMessage.Content.ReadAsStringAsync().Result;
var myObject = JsonConvert.DeserializeObject<object>(jsonString);