web-dev-qa-db-ja.com

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/"]

    }
}

構成ファイルをロードし、変数に「フォルダー」配列を保存します。

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#コード)をどのように変更すればよいですか?

19
Nicola Prada

セクションのインデクサーはキーの完全一致によって文字列を返します。配列値には接尾辞付きのキーがあるため、指定されたキーに一致するものはなく、nullになります。

動作させるには、次のようなものを使用します

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

さらにオプションについては this を確認してください。

36
THTP

ここからの元の答え: https://stackoverflow.com/a/42169474/7263255

このように動作します:

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