调用IConfiguration.Get<T>方法返回结果始终为null的问题排查
问题原因
IConfiguration的Get<T>方法本身不会自动识别并反序列化存储为字符串的JSON内容。你当前将TestClass整体序列化为JSON字符串赋值给Section1:section2键,配置系统只会将该值识别为普通字符串,无法映射到TestClass类的属性结构,因此返回null。
解决方法
方法1:手动反序列化JSON字符串
如果你需要保留当前的JSON字符串存储逻辑,直接修改取值方法,先读取字符串再手动反序列化即可:
public T GetTestAsync(IConfiguration configuration) { var section = configuration.GetSection("Section1:section2"); string jsonContent = section.Value; return JsonSerializer.Deserialize<T>(jsonContent); }
方法2:使用.NET配置规范的扁平化键结构(更推荐)
.NET配置系统本身是基于扁平化键值对设计的,你可以直接将类的属性拆分为分层键存储,无需手动做JSON序列化,原有Get<T>逻辑即可正常工作:
修改构造配置字典的代码:
var config = new Dictionary<string, string>() { { "Section1:section2:Name", "hello" } // 类的其他属性按照 {层级前缀:属性名} 的规则补充即可 };
这种方式符合.NET配置的原生设计,支持从appsettings.json、环境变量、命令行参数等多种配置源自动绑定,无需额外处理序列化逻辑。
内容的提问来源于stack exchange,提问作者user17217634
相关产品推荐
相关产品推荐

