在ASP.NET Core Web API中处理JSON数据 - Medium

作者:API传播员 · 2025-11-04 · 阅读时间:5分钟
本文详细介绍了在ASP.NET Core Web API中处理JSON数据的方法,包括使用System.Text.Json库进行自动序列化和反序列化,以及通过Newtonsoft.Json实现高级自定义功能。文章涵盖了JSON数组处理、自定义属性配置,帮助开发者构建高效API以集成Web和移动应用。

在 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.csProgram.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