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#コード)をどのように変更すればよいですか?
セクションのインデクサーはキーの完全一致によって文字列を返します。配列値には接尾辞付きのキーがあるため、指定されたキーに一致するものはなく、nullになります。
動作させるには、次のようなものを使用します
var section = configuration.GetSection($"{APP_SETTINGS_SECTION}:{APP_SETTINGS_KEY}");
var folders = section.Get<string[]>();
さらにオプションについては this を確認してください。
ここからの元の答え: https://stackoverflow.com/a/42169474/7263255
このように動作します:
var someArray = configuration
.GetSection("SomeArray")
.GetChildren()
.Select(x => x.Value)
.ToArray();