C# 如何将appsettings.json设置与设置名称中的点绑定

C# 如何将appsettings.json设置与设置名称中的点绑定,c#,asp.net,.net,appsettings,C#,Asp.net,.net,Appsettings,在观看/阅读了一些关于.net中用于将设置绑定到c#模型的选项模式的教程后,我有一个关于将设置“Microsoft.Hosting.Lifetime”绑定到模型的特殊问题 形势 我知道如何通过选项模式将设置绑定到模型。 所以让appsettings.json文件 "FeatureFlags": { "IsFeature1Enabled": "false", "IsFeature2Enabled":

在观看/阅读了一些关于.net中用于将设置绑定到c#模型的选项模式的教程后,我有一个关于将设置“Microsoft.Hosting.Lifetime”绑定到模型的特殊问题

形势 我知道如何通过选项模式将设置绑定到模型。 所以让appsettings.json文件

"FeatureFlags": {
    "IsFeature1Enabled": "false",
    "IsFeature2Enabled": "false",
    "IsFeature3Enabled": "true"
  }
将产生如下代码:

型号:

startup.cs:

private void setupappsetings模型(IServiceCollection服务)
{
services.Configure(options=>Configuration.GetSection(“FeatureFlags”).Bind(options));
}
使用DI进行分类:

专用只读功能标志选项\u功能标志;
public ClassNameHere(IOptions featureFlags)
{
_featureFlags=featureFlags.Value;
}
问题

如果启动新的web应用程序并选择web api等,则标准appsettings将包含appsettings“Microsoft.Hosting.Lifetime”。就像一开始的图片一样。 那么,我应该如何在模型中实现该设置呢

我在谷歌上搜索了很多,搜索了stackoverflow,甚至我最喜欢的博客作者Rick Strahl()也跳过了日志部分。我希望有人能帮我做这件事。谢谢


我为什么要那个财产?:因为原因;)

多亏了Asawyer,我们找到了解决方案。也许有一个更好的方法,但目前我们将其修复如下:

型号:

public class LoggingModel
{
    public LogLevel LogLevel { get; set; }
}

public class LogLevel
{
    public string Default { get; set; }
    public string Microsoft { get; set; }

    //[JsonProperty("Microsoft.Hosting.Lifetime")] => Did not work :(
    public string MicrosoftHostingLifetime { get; set; }
}
startup.cs:

services.Configure(选项=>Configuration.GetSection(“日志”).Bind(选项));
配置(选项=>
{
options.LogLevel.MicrosoftHostingLifetime=Configuration[“Logging:LogLevel:Microsoft.Hosting.Lifetime”];
});
使用DI进行分类:

private readonly LoggingModel\u LoggingModel;
public ClassNameHere(IOOptions loggingOptions)
{
_loggingModel=loggingOptions.Value;
}

多亏了Asawyer,我们找到了解决方案。也许有一个更好的方法,但目前我们将其修复如下:

型号:

public class LoggingModel
{
    public LogLevel LogLevel { get; set; }
}

public class LogLevel
{
    public string Default { get; set; }
    public string Microsoft { get; set; }

    //[JsonProperty("Microsoft.Hosting.Lifetime")] => Did not work :(
    public string MicrosoftHostingLifetime { get; set; }
}
startup.cs:

services.Configure(选项=>Configuration.GetSection(“日志”).Bind(选项));
配置(选项=>
{
options.LogLevel.MicrosoftHostingLifetime=Configuration[“Logging:LogLevel:Microsoft.Hosting.Lifetime”];
});
使用DI进行分类:

private readonly LoggingModel\u LoggingModel;
public ClassNameHere(IOOptions loggingOptions)
{
_loggingModel=loggingOptions.Value;
}

根据这个答案,您似乎需要直接指定映射,或者如果使用newtonsoft,可能需要使用json序列化库特定的json名称属性,即[JsonProperty]:谢谢您的输入。不幸的是,它导致值为null而不是“information”。默认值不为null,并且包含正确的值“信息”。我的模型看起来像:public-class-LoggingModel{public-LogLevel-LogLevel{get;set;}}}public-class-LogLevel{public-string-Default{get;set;}public-string-Microsoft{get;set;}/[JsonPropertyName(“Microsoft.Hosting.life”)][JsonProperty(“Microsoft.Hosting.life”)]公共字符串MicrosoftHostingLifetime{get;set;}}您是否像答案中的代码那样使用选项配置委托进行了尝试?这似乎是可行的,因为您可以通过字符串键名指定值,并将其分配给所需的任何属性。这里有更多细节:谢谢@asawyer,链接内容非常丰富,但没有包含解决方案。我的最后一个startup.cs现在包含以下行:services.Configure(o=>{o.LogLevel=new LogLevel{Default=Configuration[“Default”]、Microsoft=Configuration[“Microsoft”]、MicrosoftHostingLifetime=Configuration[“Microsoft.Hosting.Lifetime”]};});与包含值的默认值和MicrosoftHostingLifetime为null不同,现在这两个值都为null。此外,我想阻止使用配置['key']。如果Json属性不起作用,并且您不想使用配置选项委托方法,我不确定该怎么办。顺便说一下,在您的评论中,您的密钥名称似乎不正确。我认为应该是
Configuration[“Logging:LogLevel:Microsoft.Hosting.life”]
根据这个答案,您可能需要直接指定映射,或者如果使用newtonsoft,可能需要使用json序列化库的json名称属性,即[JsonProperty]:谢谢您的输入。不幸的是,它导致值为null而不是“information”。默认值不为null,并且包含正确的值“信息”。我的模型看起来像:public-class-LoggingModel{public-LogLevel-LogLevel{get;set;}}}public-class-LogLevel{public-string-Default{get;set;}public-string-Microsoft{get;set;}/[JsonPropertyName(“Microsoft.Hosting.life”)][JsonProperty(“Microsoft.Hosting.life”)]公共字符串MicrosoftHostingLifetime{get;set;}}您是否像答案中的代码那样使用选项配置委托进行了尝试?这似乎是可行的,因为您可以通过字符串键名指定值,并将其分配给所需的任何属性。这里有更多细节:谢谢@asawyer,链接内容非常丰富,但没有包含解决方案。我的最后一个startup.cs现在包含以下行:services.Configure(o=>{o.LogLevel=new LogLevel{Default=Configuration[“Default”]、Microsoft=Configuration[“Microsoft”]、MicrosoftHostingLifetime=Configuration[“Microsoft.Hosting.Lifetime”]};});与包含值的默认值和MicrosoftHostingLifetime为null不同,现在这两个值都为null。此外,我想防止使用Configurati
private readonly FeatureFlagOptions _featureFlags;
public ClassNameHere(IOptions<FeatureFlagOptions> featureFlags)
{
    _featureFlags = featureFlags.Value;
}
public class LoggingModel
{
    public LogLevel LogLevel { get; set; }
}

public class LogLevel
{
    public string Default { get; set; }
    public string Microsoft { get; set; }

    //[JsonProperty("Microsoft.Hosting.Lifetime")] => Did not work :(
    public string MicrosoftHostingLifetime { get; set; }
}
services.Configure<LoggingModel>(options => Configuration.GetSection("Logging").Bind(options));
services.Configure<LoggingModel>(options =>
{
     options.LogLevel.MicrosoftHostingLifetime = Configuration["Logging:LogLevel:Microsoft.Hosting.Lifetime"];
});
private readonly LoggingModel _loggingModel;
public ClassNameHere(IOptions<LoggingModel> loggingOptions)
{
    _loggingModel= loggingOptions.Value;
}