如何将IConfigurationSection中的配置映射到一个简单的类

时间:2018-11-28 12:09:12

标签: c# asp.net-mvc asp.net-web-api .net-core

使用MVC .net Core并在启动类中构建具体的配置类。我的appsettings.json看起来像这样:

{
  "myconfig": {
    "other2": "tester,
    "other": "tester",
    "root": {
      "inner": {
        "someprop": "TEST VALUE"
      }
    }
  }
}

我用一个具体的类来表示这个,如下:

public class TestConfig
{
    public string other2 { get; set; }
    public string other { get; set; }
    public Inner1 root { get; set; }
}

public class Inner1
{
    public Inner2 inner { get; set; }
}

public class Inner2
{
    public string someprop { get; set; }
}

通过执行以下操作,我可以轻松地对此进行映射:

var testConfig = config.GetSection("myconfig").Get<TestConfig>();

但是...。我对上述内容不满意的是需要使TestConfig变得比需要的复杂。理想情况下,我想要这样的东西:

public class PreciseConfig
{
    [Attribute("root:inner:someprop")]
    public string someprop { get; set; }
    public string other { get; set; }
    public string other2 { get; set; }
}

我不需要在其中嵌套对象,并且可以通过这种方式直接映射到较低的属性。这可能吗?使用.net Core 2.1。

感谢任何预先提供的指针!

P.s。我知道我可以自己创建一个PreciseConfig实例并使用config.GetValue<string>("root:inner:someprop")设置属性,但是如果我可以使用序列化属性或类似属性自动进行设置,则不需要以这种方式设置所有自定义设置。 / p>

1 个答案:

答案 0 :(得分:2)

对于更高级别的配置,您将获得与顶部节点相同的配置。

然后使用路径myconfig:root:inner获取另一个所需的部分,并从上一步绑定PreciseConfig

var preciseConfig = config.GetSection("myconfig").Get<PreciseConfig>();

config.GetSection("myconfig:root:inner").Bind(preciseConfig);

引用Configuration in ASP.NET Core : GetSection

引用Configuration in ASP.NET Core : Bind to an object graph