You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:55:59