在ASP.NET Core Web API中处理JSON数据 - Medium
在 ASP.NET Core Web API 中处理 JSON 数据
在 ASP.NET Core Web API 中,默认通过内置的 System.Text.Json 库支持 JSON 数据处理。当您创建一个新的 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
     热门API
- 1. AI文本生成
 - 2. AI图片生成_文生图
 - 3. AI图片生成_图生图
 - 4. AI图像编辑
 - 5. AI视频生成_文生视频
 - 6. AI视频生成_图生视频
 - 7. AI语音合成_文生语音
 - 8. AI文本生成(中国)
 
最新文章
- 如何实现Mock API以进行API测试 | Zuplo博客
 - 解读 TaskMatrix.AI
 - API协议设计的10种技术
 - ComfyUI API是什么:深入探索ComfyUI的API接口与应用
 - 从架构设计侧剖析: MCP vs A2A 是朋友还是对手?
 - Kimi Chat API入门指南:从注册到实现智能对话
 - 免费查询公司注册信息API的使用指南
 - 防御 API 攻击:保护您的 API 和数据的策略
 - 香港支付宝实名认证:是什么?怎么用?
 - 如何获取 Coze开放平台 API 密钥(分步指南)
 - 如何保护您的API免受自动化机器人和攻击 | Zuplo博客
 - ASP.NET Core Minimal APIs 入门指南 – JetBrains 博客