如何防止Dictionary键名在输出时改变大小写?
解决C#字典键名JSON序列化后自动小写的问题
你的问题核心是JSON序列化器默认启用了驼峰命名策略,自动把键名首字母转成小写,和字典的StringComparer无关(它只负责键的查找匹配,不影响序列化输出)。以下是两种常用序列化框架的解决方法:
一、使用System.Text.Json(.NET Core/.NET 5+默认)
1. 全局禁用自动命名策略
在项目配置文件(如Program.cs)中修改控制器的JSON配置:
builder.Services.AddControllers() .AddJsonOptions(options => { // 禁用自动命名策略,保持键名原大小写 options.JsonSerializerOptions.PropertyNamingPolicy = null; });
2. 针对单个字典单独配置序列化
如果不想全局修改,序列化时传入自定义配置:
using System.Text.Json; // 序列化时指定配置 var jsonOutput = JsonSerializer.Serialize(rows, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true // 可选,格式化JSON输出 });
二、使用Newtonsoft.Json(Json.NET)
1. 全局配置保持原键名
在Program.cs或Startup.cs中配置:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { // 使用默认解析器,不启用驼峰命名 options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });
2. 单个序列化时指定配置
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; var jsonOutput = JsonConvert.SerializeObject(rows, new JsonSerializerSettings { ContractResolver = new DefaultContractResolver(), Formatting = Formatting.Indented });
内容的提问来源于stack exchange,提问作者kas_miyulu
相关产品推荐
相关产品推荐

