如何在不使用 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中的列表创建数据框?
如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?
在 s-s-rS 中,是不是可以在不使用 C# 的情况下从主 rdl 循环一个子报表 rdl?