如何在 appSettings.json 中硬编码和读取字符串数组?
Posted
技术标签:
【中文标题】如何在 appSettings.json 中硬编码和读取字符串数组?【英文标题】:How to hardcode and read a string array in appSettings.json? 【发布时间】:2017-08-09 01:25:16 【问题描述】:我使用 VSCode 和 NetCore 1.1.1。
我需要在我的 appsetting.json 中存储多个数据路径,以让我的控制台应用程序知道在哪里查找其数据。
这是 appsettings.json 文件的摘录:
"ConnectionStrings":
"Database": "Filename=./Data/Database/securities_master.db"
,
"Data":
"Folders": ["E:/Data/Folder1/","E:/Data/Folder2/"]
我加载了配置文件,我希望将“文件夹”数组存储在一个变量中:
const string APP_SETTINGS_SECTION = "Data";
const string APP_SETTINGS_KEY = "Folders";
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
var configuration = builder.Build();
var dataFolders = configuration.GetSection(APP_SETTINGS_SECTION)[APP_SETTINGS_KEY];
dataFolders
是 NULL!
如果我将 appsetting.json 更改为仅指向这样的单个目录,则一切正常:
"ConnectionStrings":
"Database": "Filename=./Data/Database/securities_master.db"
,
"Data":
"Folders": "E:/Data/Folder1/"
dataFolder
= "E:/Data/Folder1/"
所以问题似乎是它不喜欢字符串数组,但对我来说它看起来像是一个有效的 Json 字符串数组。我应该如何修改我的 appsettings(或我的 C# 代码)来解决这个问题?
【问题讨论】:
【参考方案1】:节的索引器通过精确的键匹配返回字符串,并且由于数组值具有带有后缀的键,因此没有任何内容可以匹配给定的键并且您将得到空值。
为了让它工作,你可以使用这样的东西
var section = configuration.GetSection($"APP_SETTINGS_SECTION:APP_SETTINGS_KEY");
var folders = section.Get<string[]>();
查看this 了解更多选项。
【讨论】:
var 文件夹 = configuration.GetSection(APP_SETTINGS_SECTION)[APP_SETTINGS_KEY];和 var folder2 = configuration.GetSection($"APP_SETTINGS_SECTION:APP_SETTINGS_KEY").Value;给你同样的结果: null 如果appsettings.json中存储有字符串数组,如果只有字符串则返回字符串 @NicolaPrada,是的,没错。这就是为什么你不应该在这种特殊情况下使用 Value ,而是使用 Getsection.Get<List<string>>()
来自这里的原始答案: https://***.com/a/42169474/7263255
像这样工作:
var someArray = configuration
.GetSection("SomeArray")
.GetChildren()
.Select(x => x.Value)
.ToArray();
【讨论】:
我喜欢这种方式。它更容易理解以上是关于如何在 appSettings.json 中硬编码和读取字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms:如何避免在 MVVM 绑定中硬编码字符串