.NET Framework4.7.2中含点配置键的Config.GetSection<T>映射问题
解决.NET Framework 4.7.2中带点配置键的对象映射问题
针对配置键含.(比如attribute.RandomAttribute)无法直接映射到类对象的问题,以下是两种可行方案:
方案一:使用ConfigurationKeyName特性绑定
通过Microsoft.Extensions.Configuration.Binder包提供的[ConfigurationKeyName]特性,直接指定属性对应的完整配置键名,绕过配置系统对.的层级解析逻辑。
- 确保项目已安装
Microsoft.Extensions.Configuration.BinderNuGet包 - 定义配置类并添加特性:
using Microsoft.Extensions.Configuration; public class NewClassSettings { [ConfigurationKeyName("attribute.RandomAttribute")] public string RandomAttribute { get; set; } }
- 调用绑定方法:
// 直接绑定整个配置到类 var settings = configuration.Get<NewClassSettings>(); // 或者用你的扩展方法(需传入空字符串绑定根配置中的对应键) var settings = configuration.GetSectionAsObject<NewClassSettings>("");
方案二:手动读取键值并赋值
如果不想依赖特性,可直接读取目标键的值后手动赋值给类对象:
var settings = new NewClassSettings { RandomAttribute = configuration["attribute.RandomAttribute"] };
为什么嵌套类方案无效?
配置系统默认会将.解析为层级节点分隔符,当你用嵌套类NewClassSettings包含Attribute子对象时,系统会尝试寻找配置中的attribute节点及其下的RandomAttribute子键,但你的配置中实际是单个完整键名attribute.RandomAttribute,并非层级结构,因此无法匹配到嵌套类的属性。
内容的提问来源于stack exchange,提问作者chuftica
相关产品推荐
相关产品推荐

