ASP.NET Core Web API 处理 JSON 数据:5步打造高效 API

关注墨瑾轩,带你探索编程的奥秘!
超萌技术攻略,轻松晋级编程高手
技术宝库已备好,就等你来挖掘
订阅墨瑾轩,智趣学习不孤单
即刻启航,编程之旅更有趣

在这里插入图片描述在这里插入图片描述

Hey,小伙伴们! 今天我们要聊一个超级实用的话题——如何在 ASP.NET Core Web API 中处理 JSON 数据。如果你对 JSON 数据处理还不太熟悉,或者想了解更多高级用法,那么这篇文章绝对值得一看! 我们将一步一步带你深入了解 ASP.NET Core 中 JSON 数据处理的强大功能,并通过具体的代码示例让你轻松上手。废话不多说,让我们开始吧!

一、什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 通常用于 Web API 中的数据传输。

二、为什么在 ASP.NET Core 中处理 JSON?

  1. 标准格式:JSON 是 Web 开发中最常用的数据交换格式之一。
  2. 易于解析:ASP.NET Core 提供了强大的 JSON 解析和序列化功能。
  3. 跨平台:JSON 被广泛支持,适用于多种编程语言和平台。
  4. 性能优越:ASP.NET Core 使用高效的 System.Text.Json 库进行 JSON 处理。

三、准备工作

在开始之前,确保你已经安装了以下工具:

  • .NET SDK 5.0 或更高版本
  • Visual Studio 2019 或更高版本

四、创建 ASP.NET Core Web API 项目

  1. 创建项目

    打开 Visual Studio,选择“创建新项目”,然后选择“ASP.NET Core Web API”模板。填写项目名称和位置,点击“创建”。

    dotnet new webapi -n JsonApiDemo
    
  2. 安装必要的包

    在项目中安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包,以便使用 Newtonsoft.Json 进行 JSON 处理(可选):

    dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
    

五、配置 JSON 处理

  1. 使用默认的 System.Text.Json

    ASP.NET Core 3.0 及以上版本默认使用 System.Text.Json 库进行 JSON 处理。你可以在 Startup.cs 中进行配置:

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using System.Text.Json.Serialization;
    
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            // 使用默认的 System.Text.Json
            services.AddControllers().AddJsonOptions(options =>
            {
                // 配置 JSON 序列化选项
                options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
                options.JsonSerializerOptions.WriteIndented = true;
                options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
            });
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
    
  2. 使用 Newtonsoft.Json

    如果你更喜欢使用 Newtonsoft.Json,可以在 Startup.cs 中进行配置:

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Newtonsoft.Json.Serialization;
    
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            // 使用 Newtonsoft.Json
            services.AddControllers().AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                options.SerializerSettings.Formatting = Formatting.Indented;
                options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            });
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
    

六、创建模型和控制器

  1. 创建模型

    在项目中创建一个 Models 文件夹,并添加一个 User 类:

    // Models/User.cs
    namespace JsonApiDemo.Models
    {
        public class User
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Email { get; set; }
            public string PhoneNumber { get; set; }
            public DateTime CreatedAt { get; set; }
        }
    }
    
  2. 创建控制器

    Controllers 文件夹中创建一个 UsersController 类:

    using Microsoft.AspNetCore.Mvc;
    using JsonApiDemo.Models;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace JsonApiDemo.Controllers
    {
        [Route("api/[controller]")]
        [ApiController]
        public class UsersController : ControllerBase
        {
            private static List<User> users = new List<User>
            {
                new User { Id = 1, Name = "Alice", Email = "[email protected]", PhoneNumber = "123-456-7890", CreatedAt = DateTime.UtcNow },
                new User { Id = 2, Name = "Bob", Email = "[email protected]", PhoneNumber = "098-765-4321", CreatedAt = DateTime.UtcNow }
            };
    
            [HttpGet]
            public ActionResult<IEnumerable<User>> Get()
            {
                return users;
            }
    
            [HttpGet("{id}")]
            public ActionResult<User> Get(int id)
            {
                var user = users.FirstOrDefault(u => u.Id == id);
                if (user == null)
                {
                    return NotFound();
                }
                return user;
            }
    
            [HttpPost]
            public ActionResult<User> Post(User user)
            {
                user.Id = users.Max(u => u.Id) + 1;
                user.CreatedAt = DateTime.UtcNow;
                users.Add(user);
                return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
            }
    
            [HttpPut("{id}")]
            public ActionResult Put(int id, User user)
            {
                var existingUser = users.FirstOrDefault(u => u.Id == id);
                if (existingUser == null)
                {
                    return NotFound();
                }
                existingUser.Name = user.Name;
                existingUser.Email = user.Email;
                existingUser.PhoneNumber = user.PhoneNumber;
                return NoContent();
            }
    
            [HttpDelete("{id}")]
            public ActionResult Delete(int id)
            {
                var user = users.FirstOrDefault(u => u.Id == id);
                if (user == null)
                {
                    return NotFound();
                }
                users.Remove(user);
                return NoContent();
            }
        }
    }
    

七、测试 API

  1. 运行项目

    在 Visual Studio 中按 F5 运行项目,或者在终端中运行:

    dotnet run
    
  2. 测试 API

    使用 Postman 或浏览器测试 API。例如,访问 https://localhost:5001/api/users 查看用户列表。

八、深入理解 JSON 处理的高级用法

1. 自定义序列化选项

你可以在 Startup.cs 中进一步自定义 JSON 序列化选项。例如,配置日期格式:

services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
    options.JsonSerializerOptions.WriteIndented = true;
    options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});

public class DateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return DateTime.ParseExact(reader.GetString(), "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture);
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString("yyyy-MM-ddTHH:mm:ssZ"));
    }
}
2. 处理循环引用

如果你的数据模型中存在循环引用,可以使用 ReferenceHandler.Preserve 选项来处理:

services.AddControllers().AddJsonOptions(options =>
{
    options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;
});
3. 忽略属性

你可以在模型类中使用 [JsonIgnore] 属性来忽略特定属性的序列化:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public DateTime CreatedAt { get; set; }

    [JsonIgnore]
    public string InternalNote { get; set; }
}

九、总结

通过本文的详细介绍,你已经学会了如何在 ASP.NET Core Web API 中处理 JSON 数据。ASP.NET Core 提供了强大的 JSON 处理功能,可以帮助你轻松应对各种数据交换需求。如果你有任何问题或建议,欢迎在评论区留言交流!✨

希望这篇文章对你有所帮助!如果有任何问题或建议,欢迎随时留言!✨

你可能感兴趣的:(C#乐园,asp.net,前端,json)