如何在 appSettings.json 中硬编码和读取字符串数组?

How to hardcode and read a string array in appSettings.json?

我使用 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/"]

    }
}

我加载了配置文件,我想将 "Folders" 数组存储在一个变量中:

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];

dataFoldersNULL!

如果我将 appsetting.json 更改为仅指向一个这样的目录,一切正常:

{

    "ConnectionStrings":

    {

        "Database": "Filename=./Data/Database/securities_master.db"
    },

    "Data":

    {

     "Folders": "E:/Data/Folder1/"   
    }
}

dataFolder = "E:/Data/Folder1/"

所以问题似乎是它不喜欢字符串数组,但对我来说它看起来像一个有效的 Json 字符串数组。我应该如何修改我的应用程序设置(或我的 C# 代码)来解决这个问题?

部分 returns 字符串的索引器通过精确的键匹配,并且由于数组值具有带后缀的键,因此没有任何匹配给定键的内容,您将得到空值。

要使其正常工作,您可以使用类似这样的东西

var section = configuration.GetSection($"{APP_SETTINGS_SECTION}:{APP_SETTINGS_KEY}");
var folders = section.Get<string[]>();

并检查 this 以获得更多选项。

这里的原始答案:

像这样工作:

var someArray = configuration
   .GetSection("SomeArray")
   .GetChildren()
   .Select(x => x.Value)
   .ToArray();