如何在.net Core应用程序中使用IConfiguration绑定多级配置对象?

时间:2016-12-28 21:31:04

标签: c# json asp.net-core .net-core

我尝试绑定到应该由appsettings.json文件填充的自定义配置对象。

我的appsettings看起来有点像:

{
  "Logging": {
    "IncludeScopes": true,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Settings": {
    "Foo": {
      "Interval": 30,
      "Count": 10
    }
  }
}

设置类如下所示:

public class Settings
{
  public Foo myFoo {get;set;}
}

public class Foo
{
  public int Interval {get;set;}
  public int Count {get;set;}

  public Foo()
  {}

  // This is used for unit testing. Should be irrelevant to this question, but included here for completeness' sake.
  public Foo(int interval, int count)
  {
    this.Interval = interval;
    this.Count = count;
  }
}

当我尝试将Configuration绑定到对象的最低级别时:

Foo myFoo = Configuration.GetSection("Settings:Foo").Get<Foo>();

myFoo正确地有一个Interval和一个Count,其值分别设置为30和10。

但这并不是:

Settings mySettings = Configuration.GetSection("Settings").Get<Settings>();

mySettings的空格为foo

令人沮丧的是,如果我使用调试器,我可以看到从appsettings.json文件读入必要的数据 。我可以进入Configuration => Non-Public Members => _providers => [0] => Data并查看我需要的所有信息。它只是不会为一个复杂的对象绑定。

2 个答案:

答案 0 :(得分:3)

您的媒体资源必须与&#34; appsettings.json&#34;中的媒体资源名称相匹配。

您必须重命名您的设置&#39; myFoo属性为Foo,因为该属性名称位于json文件中。

答案 1 :(得分:2)

您还可以使用JsonProperty(包含在Newtonsoft.Json中)注释来告诉序列化器下面要做什么。

public class Settings
{
  [JsonProperty("Foo")]
  public Foo myFoo {get;set;}
}