如何将Dictionary<string, string>反序列化为AppSettings对象?
解决方案
要实现将Dictionary<string, string>反序列化为AppSettings对象,你可以直接使用ASP.NET 6内置的配置绑定功能,无需手动处理TypeConverter。具体步骤如下:
1. 安装必要的NuGet包
确保项目引用了以下包:
Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Binder
2. 调整实体类(适配只读属性的构造函数绑定)
由于你的类属性是只读的(仅包含get访问器),需要为每个类添加与属性匹配的构造函数,配置绑定系统会通过构造函数注入完成赋值:
public class AppSettings { public int? S { get; } public double? SS { get; } public string? SSS { get; } public bool? SSSS { get; } public G? G { get; } // 构造函数参数名需与配置键对应(大小写默认不敏感,建议保持一致) public AppSettings(int? s, double? ss, string? sss, bool? ssss, G? g) { S = s; SS = ss; SSS = sss; SSSS = ssss; G = g; } } public class G { public int[] GG { get; } public G(int[] gg) { GG = gg; } }
3. 执行绑定操作
将字典转换为IConfiguration实例,然后通过Get<T>方法完成绑定:
// 你的源字典 var configDict = new Dictionary<string, string> { {"S", "5"}, {"SS", "5.2"}, {"SSS", "string"}, {"SSSS", "true"}, {"G:GG", "[1, 2, 3]"} }; // 将字典转换为IConfiguration var configuration = new ConfigurationBuilder() .AddInMemoryCollection(configDict) .Build(); // 绑定到AppSettings对象 var appSettings = configuration.Get<AppSettings>();
关键说明
- 配置键的冒号
:用于表示嵌套对象层级,比如G:GG对应AppSettings.G.GG。 - 绑定系统自动处理类型转换:包括数值、布尔值、JSON格式的数组(如
[1,2,3]转int[])。 - 如果你的属性包含
set访问器,无需添加构造函数,直接调用configuration.Bind(appSettingsInstance)即可完成赋值。
内容的提问来源于stack exchange,提问作者VladisS
相关产品推荐
相关产品推荐

