.NET 8 Minimal API如何全局配置System.Text.Json.JsonSerializer?
.NET 8 Minimal API全局配置System.Text.Json的有效方法
1. 配置Minimal API的请求绑定与响应序列化选项
针对Minimal API自动处理的请求模型绑定、响应序列化场景,直接在WebApplicationBuilder阶段通过Services.ConfigureHttpJsonOptions配置即可,注意代码要放在app.Build()之前执行:
var builder = WebApplication.CreateBuilder(args); // 全局配置Json序列化规则 builder.Services.ConfigureHttpJsonOptions(options => { // 新增枚举转字符串转换器 options.SerializerOptions.Converters.Add(new JsonStringEnumConverter()); // 响应属性使用驼峰命名 options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 反序列化时忽略属性大小写 options.SerializerOptions.PropertyNameCaseInsensitive = true; }); var app = builder.Build(); // 示例端点 app.MapGet("/api/status", () => new { Status = Status.Active, Message = "操作成功" }) .WithName("GetStatus") .WithOpenApi(); app.Run(); enum Status { Active, Inactive }
2. 手动序列化/反序列化时复用全局配置
如果需要在代码中手动调用JsonSerializer.Serialize或Deserialize时复用全局配置,可将JsonSerializerOptions注册为单例服务,后续通过依赖注入直接使用:
注册全局选项
builder.Services.AddSingleton<JsonSerializerOptions>(_ => { var options = new JsonSerializerOptions(); options.Converters.Add(new JsonStringEnumConverter()); options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.PropertyNameCaseInsensitive = true; return options; });
在端点中注入使用
app.MapPost("/api/parse-data", async (HttpContext context, JsonSerializerOptions options) => { var requestModel = await context.Request.ReadFromJsonAsync<MyRequestModel>(options); // 业务处理逻辑 return Results.Ok(requestModel); }); public class MyRequestModel { public string UserName { get; set; } public UserRole Role { get; set; } } public enum UserRole { Admin, User }
注意事项
- 务必保证
ConfigureHttpJsonOptions的配置代码在var app = builder.Build();之前执行,否则配置不会被应用到Minimal API中。 - 若同时混用Minimal API和MVC控制器,
AddControllers().AddJsonOptions(...)的配置仍可生效,但Minimal API只会读取ConfigureHttpJsonOptions的设置。
内容的提问来源于stack exchange,提问作者Vadim Tomashevsky
相关产品推荐
相关产品推荐

