C# 将appsettings.json节绑定到POCO列表

C# 将appsettings.json节绑定到POCO列表,c#,json,asp.net-core,configuration,poco,C#,Json,Asp.net Core,Configuration,Poco,鉴于这两类 public class SerilogSubLoggerConfigurations { public List<SerilogSubLoggerConfiguration> SerilogConfigurations { get; set; } } public class SerilogSubLoggerConfiguration { private string _pathFormat; public LogEventLevel Lev

鉴于这两类

public class SerilogSubLoggerConfigurations
{
    public List<SerilogSubLoggerConfiguration> SerilogConfigurations { get; set; }
}

public class SerilogSubLoggerConfiguration
{
    private string _pathFormat;

    public LogEventLevel Level { get; set; }

    public string PathFormat
    {
        get => _pathFormat;
        set => _pathFormat = value.Replace("%APPLICATION_NAME%", Environment.GetEnvironmentVariable("APPLICATION_NAME"));
    }
}

我想将
SubLogger
部分绑定到
seriogsubloggerconfigurations
类。我似乎不知道如何使用此配置来创建包含三项(类型为
SerilogSubLoggerConfiguration
)的类,子日志对象的数组称为
sublogger
,但在配置POCO
SerilogSubLoggerConfigurations
中称为
SerilogConfigurations
。 这就是为什么配置绑定器无法匹配它们

在ASP.NET Core中,不可能(至少目前)更改映射属性的名称,它们应该与配置节的名称匹配。查看此项了解详细信息

所以您应该重命名POCO属性或JSON节名。在您的情况下,
SubLoggers
似乎是最合适的名称:

public class SerilogSubLoggerConfigurations
{
    public List<SerilogSubLoggerConfiguration> SubLoggers { get; set; }
}

{
  "Serilog": {
    "SubLoggers": [
      {
        "Level": "Information",
        "pathFormat": "C:/Logs/Serilog/%APPLICATION_NAME%/Information/log-{Date}.log"
      },
      {
        "Level": "Warning",
        "pathFormat": "C:/Logs/Serilog/%APPLICATION_NAME%/Warning/log-{Date}.log"
      },
      {
        "Level": "Critical",
        "pathFormat": "C:/Logs/Serilog/%APPLICATION_NAME%/Critical/log-{Date}.log"
      }
    ]
  }
}

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("AppSettings.json");
IConfiguration configuration = configurationBuilder.Build();
SerilogSubLoggerConfigurations subLoggerConfigurations = configuration.GetSection("Serilog").Get<SerilogSubLoggerConfigurations>();
将无法正确加载。您应该将其更改为:

{
  "Level": "Error",
  "pathFormat": "C:/Logs/Serilog/%APPLICATION_NAME%/Error/log-{Date}.log"
}
{
  "Level": "Critical",
  "pathFormat": "C:/Logs/Serilog/%APPLICATION_NAME%/Critical/log-{Date}.log"
}
{
  "Level": "Error",
  "pathFormat": "C:/Logs/Serilog/%APPLICATION_NAME%/Error/log-{Date}.log"
}