反序列化来自外部 api 和 return 学习者 JSON 数据的 JSON 数据
Deserialise JSON data from external api and return a leaner JSON data
我正在练习网络 api。我的目标是创建一个 Get 端点,它从外部 api 接收数据,然后 return 一个更精简的结果。
外部 api link: https://www.themealdb.com/api/json/v1/1/search.php?f=a
,
外部 api 数据如下所示:
{
"meals": [
{
"idMeal": "52768",
"strMeal": "Apple Frangipan Tart",
"strDrinkAlternate": null,
"strCategory": "Dessert",
.....
},
{
"idMeal": "52893",
"strMeal": "Apple & Blackberry Crumble",
....
}
]
}
我希望我的端点提供更精简的结果,如下所示:
[
{
"idMeal": "52768",
"strMeal": "Apple Frangipan Tart"
},
{
"idMeal": "52893",
"strMeal": "Apple & Blackberry Crumble"
}
]
下面的代码是我到目前为止尝试的,结果是空的。我希望我离正确的道路不太远。非常感谢
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc;
using RestSharp;
namespace testAPI.Controllers;
public class Content
{
public List<Meal> Meals { get; set; }
}
public class Meal
{
[JsonPropertyName("idMeal")]
public string MealId { get; set; }
[JsonPropertyName("strMeal")]
public string Name { get; set; }
}
[ApiController]
[Route("api/[controller]")]
public class DishesController : ControllerBase
{
[HttpGet]
public async Task<IActionResult> GetAllRecipes()
{
var client = new RestClient($"https://www.themealdb.com/api/json/v1/1/search.php?f=a");
var request = new RestRequest();
var response = await client.ExecuteAsync(request);
var mealList = JsonSerializer.Deserialize<Content>(response.Content);
var result = JsonSerializer.Serialize(mealList.Meals);
return Ok(result);
}
我认为问题在于反序列化失败,因为它不知道如何反序列化 Content.Meals
,因为 JSON 中没有名为 Meals
的字段 - 相反它被称为 meals
(小写m
)。
您可以通过将 JsonPropertyName
属性添加到 Content
中的 属性 class:
来解决此问题
public class Content
{
[JsonPropertyName("meals")]
public List<Meal> Meals { get; set; }
}
查看 this fiddle 进行测试 运行。
我正在练习网络 api。我的目标是创建一个 Get 端点,它从外部 api 接收数据,然后 return 一个更精简的结果。
外部 api link: https://www.themealdb.com/api/json/v1/1/search.php?f=a
,
外部 api 数据如下所示:
{
"meals": [
{
"idMeal": "52768",
"strMeal": "Apple Frangipan Tart",
"strDrinkAlternate": null,
"strCategory": "Dessert",
.....
},
{
"idMeal": "52893",
"strMeal": "Apple & Blackberry Crumble",
....
}
]
}
我希望我的端点提供更精简的结果,如下所示:
[
{
"idMeal": "52768",
"strMeal": "Apple Frangipan Tart"
},
{
"idMeal": "52893",
"strMeal": "Apple & Blackberry Crumble"
}
]
下面的代码是我到目前为止尝试的,结果是空的。我希望我离正确的道路不太远。非常感谢
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Mvc;
using RestSharp;
namespace testAPI.Controllers;
public class Content
{
public List<Meal> Meals { get; set; }
}
public class Meal
{
[JsonPropertyName("idMeal")]
public string MealId { get; set; }
[JsonPropertyName("strMeal")]
public string Name { get; set; }
}
[ApiController]
[Route("api/[controller]")]
public class DishesController : ControllerBase
{
[HttpGet]
public async Task<IActionResult> GetAllRecipes()
{
var client = new RestClient($"https://www.themealdb.com/api/json/v1/1/search.php?f=a");
var request = new RestRequest();
var response = await client.ExecuteAsync(request);
var mealList = JsonSerializer.Deserialize<Content>(response.Content);
var result = JsonSerializer.Serialize(mealList.Meals);
return Ok(result);
}
我认为问题在于反序列化失败,因为它不知道如何反序列化 Content.Meals
,因为 JSON 中没有名为 Meals
的字段 - 相反它被称为 meals
(小写m
)。
您可以通过将 JsonPropertyName
属性添加到 Content
中的 属性 class:
public class Content
{
[JsonPropertyName("meals")]
public List<Meal> Meals { get; set; }
}
查看 this fiddle 进行测试 运行。