首先,您可以通過以下命令創建一個新的 Web API 項目:
dotnet new webapi -n JsonDemo
cd JsonDemo
上述命令將創建一個名為 JsonDemo 的新 API 項目。
在 ASP.NET Core 中,您只需從操作方法返回對象,框架會自動將對象序列化為 JSON 格式。例如,調用 GetProduct 端點時,返回的響應會自動以 JSON 格式呈現。
ASP.NET Core 會將傳入的 JSON 請求自動反序列化為方法參數或模型綁定。例如,以下代碼展示了如何通過 HTTP POST 請求接收一個 Product 對象:
[HttpPost]
public IActionResult CreateProduct([FromBody] Product product)
{
if (product == null)
{
return BadRequest("Invalid product data.");
}
// 處理產品數據(例如保存到數據庫)
return Ok(product);
}
通過 POST 請求發送以下 JSON 數據即可:
{
"Id": 1,
"Name": "Laptop",
"Price": 1200
}
序列化是指將對象轉換為 JSON 字符串的過程。在 ASP.NET Core 中,System.Text.Json 庫會自動完成這一操作。如果需要手動序列化,可以使用 JsonSerializer:
var product = new Product { Id = 1, Name = "Laptop", Price = 1200 };
var jsonString = JsonSerializer.Serialize(product);
上述代碼會將 product 對象轉換為 JSON 字符串。
反序列化是將 JSON 字符串轉換回對象的過程:
var jsonString = "{"Id":1,"Name":"Laptop","Price":1200}";
var product = JsonSerializer.Deserialize(jsonString);
這段代碼會將 JSON 字符串反序列化為 Product 對象。
雖然 System.Text.Json 是默認的 JSON 處理庫,但在某些情況下,您可能需要使用 Newtonsoft.Json,例如需要更高級的自定義功能或與舊項目兼容時。
首先,安裝相關包:
dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
然后,在 Startup.cs 或 Program.cs 中配置:
builder.Services.AddControllers().AddNewtonsoftJson();
使用 Newtonsoft.Json,可以通過屬性自定義對象的序列化和反序列化方式:
public class Product
{
[JsonProperty("product_id")]
public int Id { get; set; }
[JsonProperty("product_name")]
public string Name { get; set; } public decimal Price { get; set; }
}
上述代碼會生成以下 JSON 輸出:
{
"product_id": 1,
"product_name": "Laptop",
"Price": 1200
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public decimal Price { get; set; }
}
在 JSON 輸出中,Price 屬性將被排除。
System.Text.Json 也提供了一些自定義功能,例如控制屬性名稱、忽略空值或格式化輸出。以下代碼展示了如何全局修改 JSON 序列化選項:
builder.Services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null; // 使用原始屬性名稱
options.JsonSerializerOptions.WriteIndented = true; // 格式化輸出
options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull; // 忽略空值
});
ASP.NET Core Web API 還支持 JSON 數組和集合的處理。
以下代碼展示了如何返回一個 JSON 數組:
[HttpGet]
public IActionResult GetProducts()
{
var products = new List
{
new Product { Id = 1, Name = "Laptop", Price = 1200 },
new Product { Id = 2, Name = "Smartphone", Price = 800 }
};
return Ok(products);
}
返回的 JSON 數據如下:
[
{ "Id": 1, "Name": "Laptop", "Price": 1200 },
{ "Id": 2, "Name": "Smartphone", "Price": 800 }
]
以下代碼展示了如何接收一個 JSON 數組:
[HttpPost]
public IActionResult CreateProducts([FromBody] List products)
{
if (products == null || !products.Any()) {
return BadRequest("No products provided.");
} // 處理產品列表
return Ok(products);
}
通過 POST 請求發送以下 JSON 數組即可:
[
{ "Id": 1, "Name": "Laptop", "Price": 1200 },
{ "Id": 2, "Name": "Smartphone", "Price": 800 }
]
ASP.NET Core Web API 內置了對 JSON 數據的強大支持,無論是默認的 System.Text.Json,還是更靈活的 Newtonsoft.Json,都能滿足不同的開發需求。掌握 JSON 的序列化、反序列化以及自定義處理方式,將幫助您構建高效、可靠的 API,輕松與現代 Web 和移動應用程序集成。
原文鏈接: https://medium.com/@nwonahr/working-with-json-data-in-asp-net-core-web-api-fbc4f0ee39c4