如何在.NET5中为接收JSON.html响应的目标类建模



我正在尝试从一个公共WEB Api读取对象列表,该Api提供了一个带有对象数组的JSON文件,我使用的是Blazor和Net 5平台。

反序列化失败,出现以下错误:

System.Text.Json.JsonException: The JSON value could not be converted to Meme[].

我怀疑我在为";接收";对象错误,我应该更改我的代码还是使用其他库才能使此代码成功

Api可以在这个端点找到,我尝试用以下两种方式读取响应:

var response = await Http.GetFromJsonAsync<Meme[]>("https://api.imgflip.com/get_memes");

var httpResponse = await Http.GetAsync("https://api.imgflip.com/get_memes");
var response = await httpResponse.Content.ReadFromJsonAsync<Meme[]>();

Meme类声明如下:

public string Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public int BoxCount { get; set; }

并且响应应该包含以下内容:

"success": true,
"data": {
"memes": [
{
"id": "181913649",
"name": "Drake Hotline Bling",
"url": "https://i.imgflip.com/30b1gx.jpg",
"width": 1200,
"height": 1200,
"box_count": 2
},
{
...
},
... ]
}

这些是我正在包括的库:

using System.Net.Http;
using System.Net.Http.Json;

响应包含的不仅仅是Memes本身。Meme数组位于对象datamemes内。对整个响应建模,您将能够对其进行反序列化。因此,您需要以下内容:

public class Response
{
public bool success { get; set; }
public Data data { get; set; }
}
public class Data
{
public Meme[] memes { get; set; }
}
public class Meme
{
public string id { get; set; }
public string name { get; set; }
public string url { get; set; }
public int width { get; set; }
public int height { get; set; }
public int box_count { get; set; }
}
// Now you can use that like this:
var response = await httpResponse.Content.ReadFromJsonAsync<Response>();

请注意,VS中有一个方便的工具为我生成了它。您可以将JSON粘贴为Edit > Paste Special > Paste JSON as Classes下的类。您仍然可以使用";正常的";驼色大小写,但您可能必须指示序列化程序与区分大小写的属性名不匹配。

相关内容

  • 没有找到相关文章

最新更新