在ASP.NET Core Web API中处理JSON数据 - Medium
在 ASP.NET Core Web API 中处理 JSON 数据
在 ASP.NET Core Web API 项目时,JSON 格式会被自动配置。这使得开发者能够轻松地处理 JSON 数据,包括序列化和反序列化操作。
创建新的 ASP.NET Core Web API 项目
首先,您可以通过以下命令创建一个新的 Web API 项目:
dotnet new webapi -n JsonDemo
cd JsonDemo
上述命令将创建一个名为 JsonDemo 的新 API 项目。
在 ASP.NET Core 中,您只需从操作方法返回对象,框架会自动将对象序列化为 JSON 格式。例如,调用 GetProduct 端点时,返回的响应会自动以 JSON 格式呈现。
接收 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 对象。
使用 Newtonsoft.Json 进行高级自定义
虽然 System.Text.Json 是默认的 JSON 处理库,但在某些情况下,您可能需要使用 Newtonsoft.Json,例如需要更高级的自定义功能或与旧项目兼容时。
安装 Newtonsoft.Json
首先,安装相关包:
dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
然后,在 Startup.cs 或 Program.cs 中配置:
builder.Services.AddControllers().AddNewtonsoftJson();
自定义 JSON 属性
使用 Newtonsoft.Json,可以通过属性自定义对象的序列化和反序列化方式:
- [JsonProperty]:自定义 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
}
- [JsonIgnore]:忽略某些属性的序列化。
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public decimal Price { get; set; }
}
在 JSON 输出中,Price 属性将被排除。
自定义 System.Text.Json 的行为
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; // 忽略空值
});
处理 JSON 数组和集合
ASP.NET Core Web API 还支持 JSON 数组和集合的处理。
返回 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 数组
以下代码展示了如何接收一个 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
最新文章
- 供应链管理中的 EDI 与 API 趋势解析
- 提升 API 和数据库性能的有效策略
- 通过API集成赋能Autogen Multi-Agent系统
- 身份证二要素API在Java、Python、PHP中的使用教程
- Python网页抓取API:获取Google搜索结果的实用指南
- API安全指南:如何保护数据免受攻击?
- 用花粉季节查询api提高生活质量:Ambee的季节性追踪功能
- 什么是API测试?API测试指南 – Parasoft
- 顶级API安全攻击:理解与缓解风险
- 使用免费API实时抓取百度热搜的实战教程
- 使用Hacking APIs GPT 进行 API 安全测试
- 企业三要素认证API在Java、Python、PHP中的使用教程