ASP.NET Core中使用元组作为Action返回类型时保留字段名
如何让Action返回的元组在JSON中使用自定义字段名?
可以实现,核心是使用C#命名元组并配置JSON序列化器以保留元组的自定义字段名,以下是具体方案:
关键前提
确保代码使用C# 7.0及以上版本,且控制器方法返回的是命名元组(即定义时指定字段名,如(Customer customer, string state)),而非无名称的普通元组。
针对ASP.NET Core默认序列化器(System.Text.Json)的配置
默认情况下,System.Text.Json仅序列化类的属性,而命名元组的元素是公共字段,因此需要开启字段序列化选项:
.NET 6+(Program.cs)
builder.Services.AddControllers() .AddJsonOptions(options => { // 开启字段序列化,保留命名元组的自定义名称 options.JsonSerializerOptions.IncludeFields = true; });
.NET Core 3.x - 5.x(Startup.cs)
public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.IncludeFields = true; }); }
配置完成后,Action返回的命名元组会被序列化为带有自定义字段名的JSON,示例如下:
{ "customer": { "Name": "Alice", "Email": "alice@example.com" }, "moneySpent": 456.78 }
针对Newtonsoft.Json(Json.NET)的配置
如果项目使用Newtonsoft.Json作为序列化器(常用于兼容旧项目或需要更多序列化特性),默认就支持命名元组的自定义字段名,只需完成以下步骤:
- 安装NuGet包:
Microsoft.AspNetCore.Mvc.NewtonsoftJson - 在配置中启用:
.NET 6+(Program.cs)
builder.Services.AddControllers() .AddNewtonsoftJson();
.NET Core 3.x - 5.x(Startup.cs)
public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddNewtonsoftJson(); }
配置后,命名元组的自定义字段名会直接被序列化为JSON属性名,无需额外设置。
内容的提问来源于stack exchange,提问作者Rabbi
相关产品推荐
相关产品推荐

