Json对象
"LogLevel": {
"Default": "Warning"
}
无法映射到
public KeyValuePair<string,string> LogLevel { get; set; }
原因很简单。如果一段时间后,该部分将扩展为另一个字段:
"LogLevel": {
"Default": "Warning",
"SomeOtherField": "SomeValue"
}
它应该如何映射到单个
KeyValuePair<string,string>
? 当然,在您的简单情况下,这样的单键值对象可能会被潜在映射,但configuration binder在其假设中并没有走那么远,它只是不以这种方式工作。
我认为这是一件好事,因为你试图从强类型的POCO转换到一些键值包,这在某种程度上降低了强类型配置的整体价值。净核心。
解决你的问题很简单。只需声明
LoggingLevel
使用单个(此时)属性初始化
Default
属于
string
类型:
public class LoggingLevel
{
public string Default { get; set; }
}
public class LoggerSettings
{
public bool IncludeScopes { get; set; }
public LoggingLevel LogLevel { get; set; }
}
您可以再进一步设置
违约
属性为
Microsoft.Extensions.Logging.LogLevel
. 配置绑定器将正确映射字符串值,如
"Warning"
到枚举值
LogLevel.Warning
:
public class LoggingLevel
{
public LogLevel Default { get; set; }
}
拥有如此简单的POCO似乎有些过头了,对于高级配置,您将拥有相当多的POCO。但这实际上是一条路,强类型、显式和可扩展。