如何将含大写字段的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
相关产品推荐
相关产品推荐

