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

如何将含大写字段的appsettings.json绑定到驼峰命名的C#类?

C# 全大写蛇形命名配置绑定到驼峰类解决方案

方法1:使用ConfigurationKeyName特性(推荐,全版本兼容)

这是最简洁稳妥的方案,.NET Core 3.0及以上版本原生支持,直接在配置类的属性上标记对应配置文件的键名即可:

using Microsoft.Extensions.Configuration;

public class MySettings
{
    [ConfigurationKeyName("FIELD_ONE")]
    public string FieldOne { get; set; }
    [ConfigurationKeyName("FIELD_TWO")]
    public string FieldTwo { get; set; }
}

绑定逻辑和常规配置完全一致,示例:

// 1. 直接读取配置实例
var mySettings = configuration.Get<MySettings>();

// 2. 注册到依赖注入容器供全局使用(ASP.NET Core场景)
builder.Services.Configure<MySettings>(builder.Configuration);

注意:不要混用JsonPropertyName特性,该特性仅作用于System.Text.Json的普通序列化逻辑,对.NET配置系统的绑定逻辑无效。

方法2:批量蛇形命名转换(适合配置项较多的场景)

如果配置项数量多,逐个加特性效率低,可以自定义绑定逻辑,批量将蛇形全大写的配置键转换为帕斯卡命名匹配属性:

public static T BindSnakeCaseSettings<T>(this IConfiguration config) where T : new()
{
    var settings = new T();
    var properties = typeof(T).GetProperties();
    foreach (var prop in properties)
    {
        // 将属性名转换为蛇形全大写匹配配置键
        var snakeKey = string.Concat(prop.Name.Select((c, i) => i > 0 && char.IsUpper(c) ? "_" + c : c.ToString())).ToUpper();
        var value = config[snakeKey];
        if (value != null)
        {
            prop.SetValue(settings, Convert.ChangeType(value, prop.PropertyType));
        }
    }
    return settings;
}

使用方式:

var mySettings = configuration.BindSnakeCaseSettings<MySettings>();

内容的提问来源于stack exchange,提问作者Pupkin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:48:00