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

C# 如何在appSettings.json中硬编码和读取字符串数组?,c#,.net-core,appsettings,C#,.net Core,Appsettings,我使用VSCode和netcore1.1.1 我需要在appsetting.json中存储几个数据路径,让控制台应用程序知道在哪里查找数据 这是appsettings.json文件的摘录: { "ConnectionStrings": { "Database": "Filename=./Data/Database/securities_master.db" }, "Data": { "Folders": ["E:/Da

我使用VSCode和netcore1.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#代码)来解决这个问题?

节的索引器按精确的键匹配返回字符串,并且由于数组值有带后缀的键,所以没有任何东西可以匹配给定的键,因此将得到null

为了让它工作,你可以用这样的东西

var section = configuration.GetSection($"{APP_SETTINGS_SECTION}:{APP_SETTINGS_KEY}");
var folders = section.Get<string[]>();
var section=configuration.GetSection($“{APP\u SETTINGS\u section}:{APP\u SETTINGS\u KEY}”);
var folders=section.Get();
并查看更多选项。

此处的原始答案:

工作原理如下:

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

var folder=configuration.GetSection(APP_SETTINGS_SECTION)[APP_SETTINGS_KEY];和var folder2=configuration.GetSection($“{APP\u SETTINGS\u SECTION}:{APP\u SETTINGS\u KEY}”).Value;给出相同的结果:如果appsettings.json中存储了字符串数组,则为null;如果只有string@NicolaPrada是的,没错。这就是为什么在这种情况下不应该使用Value,而应该使用Get()扩展方法解析数组。这应该是可以接受的答案。它解决了OP中提到的问题。也解决了我的问题。我同意,这是最好的答案,简单有效的答案!仅供参考:如果您希望返回列表而不是字符串[],则此模式也适用于列表:
section.Get()
我喜欢这种方式。它更容易理解