C#类蛇形命名字段API序列化时转换为驼峰命名的实现方法
实现方案
你可以根据项目所用的序列化库选择对应方案,两种方案都可以满足需求:
方案1:单个类专属配置(无全局影响,最稳妥,推荐优先使用)
直接给Project类的属性加序列化别名标签即可,不需要修改全局配置,不会影响其他接口的序列化逻辑:
如果你用的是.NET 内置的 System.Text.Json(.NET Core 3.0+ / .NET 5+ 默认)
using System.Text.Json.Serialization; public class Project { [JsonPropertyName("projectId")] public int project_id { get; set; } [JsonPropertyName("accountId")] public long account_id { get; set; } [JsonPropertyName("userId")] public long user_id { get; set; } public string name { get; set; } public string description { get; set; } [JsonPropertyName("createdAt")] public DateTime created_at { get; set; } [JsonPropertyName("updatedAt")] public DateTime updated_at { get; set; } }
如果你用的是 Newtonsoft.Json(Json.NET)
using Newtonsoft.Json; public class Project { [JsonProperty("projectId")] public int project_id { get; set; } [JsonProperty("accountId")] public long account_id { get; set; } [JsonProperty("userId")] public long user_id { get; set; } public string name { get; set; } public string description { get; set; } [JsonProperty("createdAt")] public DateTime created_at { get; set; } [JsonProperty("updatedAt")] public DateTime updated_at { get; set; } }
方案2:全局统一配置(适合项目所有类都是蛇形命名,需要统一转驼峰返回的场景)
如果项目内所有C#类的字段都是蛇形命名,需要全局统一转换为驼峰格式返回,可配置全局序列化规则:
基于 System.Text.Json 配置
- 先自定义蛇形转驼峰的命名策略:
using System.Text.Json; public class SnakeToCamelNamingPolicy : JsonNamingPolicy { public override string ConvertName(string name) { if (string.IsNullOrWhiteSpace(name) || !name.Contains('_')) return name; var segments = name.Split('_', StringSplitOptions.RemoveEmptyEntries); return segments[0].ToLowerInvariant() + string.Concat(segments.Skip(1).Select(s => char.ToUpperInvariant(s[0]) + s[1..].ToLowerInvariant())); } }
- 在
Program.cs中注册全局序列化配置:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = new SnakeToCamelNamingPolicy(); }); // 其余配置不变 var app = builder.Build(); app.Run();
基于 Newtonsoft.Json 配置
- 先安装
Microsoft.AspNetCore.Mvc.NewtonsoftJsonNuget包 - 在
Program.cs中配置全局规则:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy() }; // 若默认驼峰策略不支持下划线转换,自定义NamingStrategy即可,逻辑和上述System.Text.Json的自定义策略一致 }); // 其余配置不变 var app = builder.Build(); app.Run();
内容的提问来源于stack exchange,提问作者Shashwat Prakash
相关产品推荐
相关产品推荐

