首页 > 解决方案 > 如何在不使用 for 循环的情况下从 appsettings 文件中读取对象数组中特定键的值

问题描述

我的 appsettings json 文件

    {
          "AppSettings": {
             "contractInfo": [
                    { "contract1": "01/11/2020"},
                    { "contract2": "29/07/2021"},
                    { "contract3": "15/10/2021"},
                    { "contract4": "15/02/2021"}
                ]
            }
}

我有一个单独的配置类。

public ConfigHelper(IConfiguration configuration)
{
    _configuration = configuration;
}
public string GetConfigValue(string key)
{
    var value = _configuration["AppSettings:" + key];
    return !string.IsNullOrEmpty(value) ? Convert.ToString(value) : string.Empty;
}

Contract Info 作为键值对,其中键是合约名称,值是合约结束日期。

如何在不使用 appsettings.json 文件中的 for 循环的情况下读取特定合同的结束日期。(也就是说,如果我们从数据库中获取合同名称为“合同 3”,我想读取合同结束日期来自 appsettingsjson 的合同 3,不使用 for 循环)

任何帮助表示赞赏。谢谢你。

标签: c#arrayskey-valueappsettings

解决方案


您可以将此值加载到字典中(请参阅该链接

然后,您可以使用键名加载任何选项。

编辑

您必须将 appconfig.json 更改为:

"contractInfo": {
     "contract1": "01/11/2020",
     "contract2": "29/07/2021",
     "contract3": "15/10/2021",
     "contract4": "15/02/2021"
  }

然后你创建一个自定义类:

public class ApplicationSettings
{
    public Dictionary<string, string> contractInfo { get; set; }
}

在 sturtup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ApplicationSettings>(Configuration);
}

然后你可以像字典一样使用这个值:

var appSettings = services.BuildServiceProvider().GetRequiredService<IOptions<ApplicationSettings>>().Value;

var dValue = appSettings.contractInfo["contract1"];

推荐阅读