如何在 .NET5 中建模目标 class 以接收 JSON html 响应
How to model a target class for receiving a JSON html response in .NET5
我正在尝试从 public WEB Api 中读取一个对象列表,它提供了一个包含对象数组的 JSON 文件,我正在使用 Blazor 和Net 5平台。
反序列化失败并出现此错误:
System.Text.Json.JsonException: The JSON value could not be converted to Meme[].
我怀疑我对“接收”对象的建模不正确,我应该更改我的代码还是使用其他库来使此代码成功?
Api可以在this endpoint找到,我试着用这两种方式阅读回复:
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 class 声明如下:
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;
响应中包含的不仅仅是您的模因本身。 Meme 数组位于对象 data
和 memes
内。对整个响应进行建模,您将能够反序列化它。因此,您将需要以下内容:
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 中有一个方便的工具可以为我生成它。您可以在 Edit > Paste Special > Paste JSON as Classes
下将 JSON 粘贴为 类。您仍然可以使用“普通”驼峰式大小写,但您可能必须指示序列化程序不匹配 属性 区分大小写的名称。
我正在尝试从 public WEB Api 中读取一个对象列表,它提供了一个包含对象数组的 JSON 文件,我正在使用 Blazor 和Net 5平台。
反序列化失败并出现此错误:
System.Text.Json.JsonException: The JSON value could not be converted to Meme[].
我怀疑我对“接收”对象的建模不正确,我应该更改我的代码还是使用其他库来使此代码成功?
Api可以在this endpoint找到,我试着用这两种方式阅读回复:
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 class 声明如下:
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;
响应中包含的不仅仅是您的模因本身。 Meme 数组位于对象 data
和 memes
内。对整个响应进行建模,您将能够反序列化它。因此,您将需要以下内容:
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 中有一个方便的工具可以为我生成它。您可以在 Edit > Paste Special > Paste JSON as Classes
下将 JSON 粘贴为 类。您仍然可以使用“普通”驼峰式大小写,但您可能必须指示序列化程序不匹配 属性 区分大小写的名称。