将 appsettings.json 映射到类

Ali*_*igy 12 c# configuration .net-core

我正在尝试将 appsettings.json 转换为 C# 类

我用来Microsoft.Extensions.Configuration从 appsettings.json 读取配置

我使用反射编写以下代码,但我正在寻找更好的解决方案

foreach (var (key, value) in configuration.AsEnumerable())
{
    var property = Settings.GetType().GetProperty(key);
    if (property == null) continue;
    
    object obj = value;
    if (property.PropertyType.FullName == typeof(int).FullName)
        obj = int.Parse(value);
    if (property.PropertyType.FullName == typeof(long).FullName)
        obj = long.Parse(value);
    property.SetValue(Settings, obj);
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 20

从appsettings.json文件构建配置:

var config = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional = false)
            .Build()
Run Code Online (Sandbox Code Playgroud)

然后添加Microsoft.Extensions.Configuration.Binder nuget 包。您将拥有将配置(或配置部分)绑定到现有或新对象的扩展。

例如,您有一个设置类(顺便说一句,按照惯例,它称为选项)

public class Settings
{
    public string Foo { get; set; }
    public int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

appsettings.json

{
  "Foo": "Bob",
  "Bar": 42
}
Run Code Online (Sandbox Code Playgroud)

要将配置绑定到新对象,您可以使用Get<T>()扩展方法:

var settings = config.Get<Settings>();
Run Code Online (Sandbox Code Playgroud)

要绑定到现有对象,您可以使用Bind(obj)

var settings = new Settings();
config.Bind(settings);
Run Code Online (Sandbox Code Playgroud)