我正在使用 web api 進行練習。我的目標是創建一個 Get 端點,它從外部 api 接收資料,然后回傳更精簡的結果。external 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);
}
uj5u.com熱心網友回復:
我認為問題在于反序列化失敗,因為它不知道如何反序列Content.Meals化,因為 JSON 中沒有名為的欄位Meals- 相反它被稱為meals(小寫m)。
您可以通過將JsonPropertyName屬性添加到Content類中的屬性來解決此問題:
public class Content
{
[JsonPropertyName("meals")]
public List<Meal> Meals { get; set; }
}
看看這個小提琴進行測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/450020.html
標籤:C# 。网 asp.net-web-api 序列化 反序列化
