首页 > 解决方案 > HttpClient 未返回与我的模型匹配的 API 数据

问题描述

您好编写了一个连接到 API 的小型 Web 应用程序。

它正在连接到 API 并返回数据,如您在此处看到的:

 astroTechItem= await Http.GetFromJsonAsync<AstroTechItem[]>("api/AstroTechItem/34");

它返回以下 JSON:

{
"objectId": 34,
"scopeId": 3,
"title": "solar telescope",
"completed": false

}

在我的应用程序中,我有这个模型:

private class AstroTechItem
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsComplete { get; set; }
}

我正在像这样反序列化:

JsonSerializer serializer = new JsonSerializer();

try
{
    return serializer.Deserialize<AstroTechItem>(jsonReader);
}
catch(JsonReaderException)
{
    Console.WriteLine("Invalid JSON.");
} 
}
else
{
    Console.WriteLine("HTTP Response was invalid and cannot be deserialised.");
}

但我的模型与 API 返回的不匹配。

我的控制台一直显示:Invalid JSON.

我需要联系 API 的制造商并让他们更改吗?

或者有没有办法让 JSON 适合我的模型?

我想不通。

谢谢!

标签: c#asp.net-coreasp.net-core-3.1

解决方案


要将 json 反序列化为模型,模型的属性必须与 json 的属性匹配。或者您可以使用 json 属性名称注释模型。在您的情况下,没有任何属性匹配。

最简单的方法是更新模型以使其与外部 API 保持一致,如下所示:

private class AstroTechItem
{
  public long ObjectId { get; set; }
  public long ScopeId { get; set; }
  public string Title { get; set; }
  public bool Completed { get; set; }
}

否则,您可以注释模型:

private class AstroTechItem
{
  [JsonProperty("objectId")]
  public long Id { get; set; }
  [JsonProperty("title")]
  public string Name { get; set; }
  [JsonProperty("isComplete")]
  public bool Completed { get; set; }
}

推荐阅读