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

Posted

技术标签:

【中文标题】如何在不使用 for 循环的情况下从 appsettings 文件中读取对象数组中特定键的值【英文标题】:How to read the value of a particular key in array of objects from appsettings file without using a for loop 【发布时间】: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,因为取决于我们从数据库获得的名称。(它可能因用户而异),我必须得到日期 为什么需要硬编码? 不,我不想硬编码 【参考方案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 的建议,这绝对是有意义的。 :)

以上是关于如何在不使用 for 循环的情况下从 appsettings 文件中读取对象数组中特定键的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用for循环的情况下从pyspark中的列表创建数据框?

如何在不使用 foreach 循环的情况下从视图访问模型

如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?

在 s-s-rS 中,是不是可以在不使用 C# 的情况下从主 rdl 循环一个子报表 rdl?

如何在不重复单词并遍历整个数组的情况下从数组中随机播放文本? (迅速)

如何在不使用表单的情况下从 jsp 调用 servlet