【问题标题】:How to read the value of a particular key in array of objects from appsettings file without using a for loop如何在不使用 for 循环的情况下从 appsettings 文件中读取对象数组中特定键的值
【发布时间】:2021-11-19 07:17:27
【问题描述】:

我的 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 循环)

感谢任何帮助。 谢谢。

【问题讨论】:

  • 这个 json 有点奇怪,你有一个对象数组,它们都有不同的属性名称,是的,你可以用一些时髦的转换器或活页夹或提供者来做到这一点,这都比这是值得的。如果可能的话,您似乎应该将您的 json 更改为实际的字典
  • 我认为值得注意的是,除非您知道要测试的数组中的确切索引,否则如果没有某种循环机制,您将无法真正访问数组中的特定值,直接或在 .NET Core 本身内。如果将contractInfo 更改为对象而不是数组,则可以以更高效的方式访问键。
  • @Llama 我想以这种格式保留我的 appsettings 并完成任务(因为它只是已实施项目的一部分)。有没有办法可以读取特定密钥仅没有硬编码为contract1,因为取决于我们从数据库获得的名称。(它可能因用户而异),我必须得到日期
  • 为什么需要硬编码?
  • 不,我不想硬编码

标签: c# arrays key-value appsettings


【解决方案1】:

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

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

编辑

您必须将您的 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"];

【讨论】:

  • 您能否提供一些示例代码来回答这个问题,因为您链接到的问题似乎没有回答它。
  • 没有电脑很难创建一个例子... :) 下次我做...
  • 我希望不是something like this
  • 一般用同样的方法回答这个问题,他添加了一些例子......
  • 好的,现在有了更改 JSON 的建议,这绝对是有意义的。 :)
猜你喜欢
  • 2022-01-02
  • 2011-12-21
  • 1970-01-01
  • 2016-04-23
  • 2023-02-05
  • 1970-01-01
  • 2019-12-01
  • 2018-04-13
  • 1970-01-01
相关资源
最近更新 更多