こちらの記事では、appsettings.json から情報を読み込むコードを紹介しました。
紹介した方法では1つのキーに対して1つの値を格納していましたが、appsettings.jsonに1つのキーに対して、配列で情報を格納したい場合があります。
この記事では、appsettings.jsonから配列の値を読み取るコードを紹介します。
下記のappsettings.jsonファイルを用意します。Config セクション内に配列のデータが記述されています。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Config": [
"Penguin Cookie",
"Camel Caramel",
"WhiteBear Icecream"
],
"AllowedHosts": "*"
}
プログラムのコードは以下です。ASP.NET アプリケーション(.NET6)を作成して、Program.csに下記コードを記述します。
using Microsoft.Extensions.Configuration;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
IConfigurationSection section = configuration.GetSection("Config");
string[] confArray = section.Get<string[]>();
string outputText = "<html><body>";
foreach (string s in confArray) {
outputText += s + "<br/>";
}
outputText += "</body></html>";
app.MapGet("/", (HttpContext context) => {
context.Response.ContentType = "text/html";
return outputText;
});
app.Run();
appsettings.jsonファイルを読み込みセクションを読み込みます。appsettings.jsonから通常のデータを読み込む場合のコードと同様です。
詳細はこちらの記事を参照して下さい。
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
IConfigurationSection section = configuration.GetSection("Config");
配列の値を読み込む場合は、IConfigurationSection のGet<T>
メソッドを利用します。今回は配列のデータが文字列のため、string[]
を記述しています。
string[] confArray = section.Get<string[]>();
なお、T
にList<string>
を与えるコードでも同様に動作します。
List<string> confArray = section.Get<List<string>>();
以下のコードで appsettings.jsonから読み出した値をページに表示します。
string outputText = "<html><body>";
foreach (string s in confArray) {
outputText += s + "<br/>";
}
outputText += "</body></html>";
app.MapGet("/", (HttpContext context) => {
context.Response.ContentType = "text/html";
return outputText;
});
プロジェクトを実行します。Webブラウザが起動し、下図のページが表示されます。
appsettings.jsonファイルに記載した値がページに表示されることが確認できます。
appsettings.jsonファイルの構造が以下の場合の例です。
AppData セクション内のProductsの値が配列になっています。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AppData": {
"Products": [
"ふわふわ ソファー",
"かるがる チェアー",
"ひろびろ テーブル",
"かための ベッド",
"おしゃれ スタンド"
]
},
"AllowedHosts": "*"
}
プログラムのコードは以下です。ASP.NET アプリケーション(.NET6)を作成して、Program.csに下記コードを記述します。
using Microsoft.Extensions.Configuration;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
IConfigurationSection section = configuration.GetSection("AppData:Products");
string[] pData = section.Get<string[]>();
string outputText = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /></head><body>";
foreach (string s in pData) {
outputText += s + "<br/>";
}
outputText += "</body></html>";
app.MapGet("/", (HttpContext context) => {
context.Response.ContentType = "text/html";
return outputText;
});
app.Run();
appsettings.jsonファイルを読み込みセクションを読み込むコードは先の例と同じコードです。
セクション名の指定が先の例とは異なり、(セクション名):(値のキー名)
の形式で指定します。
IConfigurationSection section = configuration.GetSection("AppData:Products");
取得したIConfigurationSection から値を呼び出すコードは先の例と同様にGet<T>
メソッドを呼び出して値を取得します。
string[] pData = section.Get<string[]>();
プロジェクトを実行します。Webブラウザが起動し、下図のページが表示されます。
appsettings.jsonファイルに記述した値がページに表示されます。
表示が文字化けしてしまう場合はこちらの記事を参照してください。