如何在 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];

dataFoldersNULL

如果我将 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 ,而是使用 Get() 扩展方法解析数组。 这应该是公认的答案。它解决了OP所述的问题。也解决了我的问题。 我同意,这是最好的答案,简单有效 很好的答案!仅供参考:此模式也适用于 List 如果您想返回它而不是 string[]:section.Get&lt;List&lt;string&gt;&gt;()【参考方案2】:

来自这里的原始答案: https://***.com/a/42169474/7263255

像这样工作:

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

【讨论】:

我喜欢这种方式。它更容易理解

以上是关于如何在 appSettings.json 中硬编码和读取字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中硬编码 UIView 的大小属性

如何避免在 COBOL 程序中硬编码凭据?

Xamarin.Forms:如何避免在 MVVM 绑定中硬编码字符串

如何删除 Vue 中硬编码的图标?

如何使基于类的视图接受来自 URL 的参数或在 URLconf 中硬编码

使用VS2017中的AWS无服务器应用程序读取appsettings.json文件