.NET 7 Minimal API中如何替换System.Text.Json为Newtonsoft JSON?
.NET 7 Minimal API 替换 System.Text.Json 为 Newtonsoft.Json 的正确配置
步骤1:安装必要的NuGet包
Minimal API集成Newtonsoft.Json需要依赖Microsoft.AspNetCore.Mvc.NewtonsoftJson包,通过以下命令安装:
dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
步骤2:配置服务(替换之前无效的配置)
在Program.cs中,替换你之前的AddMvc()或AddControllersWithViews()配置,改用以下代码:
builder.Services.AddControllers().AddNewtonsoftJson(options => { // 自定义Newtonsoft.Json序列化设置,示例配置默认契约解析器 options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); // 可添加其他序列化配置,比如日期格式、空值处理等 // options.SerializerSettings.DateFormatString = "yyyy-MM-dd"; // options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; }); // 确保端点API探索器被注册,让Minimal API使用配置好的JSON格式化器 builder.Services.AddEndpointsApiExplorer();
为什么之前的配置无效?
你之前使用的AddMvc()和AddControllersWithViews()是针对完整MVC/视图控制器场景的服务注册,而Minimal API不依赖这些控制器相关的服务体系,所以无法触发Newtonsoft.Json的配置生效。而AddControllers()是针对API控制器的轻量服务注册,同时会为Minimal API提供全局的JSON序列化格式化器支持。
验证生效
创建一个测试模型并映射端点:
public class Product { public int ProductId { get; set; } public string ProductName { get; set; } } app.MapGet("/products", () => { return new Product { ProductId = 1, ProductName = "Test Product" }; });
启动项目后访问/products,如果返回的JSON字段为ProductId、ProductName(PascalCase),说明Newtonsoft.Json已经生效(System.Text.Json默认会转为驼峰命名productId、productName)。
内容的提问来源于stack exchange,提问作者MojoDK
相关产品推荐
相关产品推荐

