appsettings.json からオブジェクト配列を読み込むコードを紹介します。
概要
こちらの記事では、appsettings.json から配列のデータを読み込むコードを紹介しました。
この記事では、appsettings.jsonから値が配列のオブジェクトになっているデータを読み込むコードを紹介します。
セクションの下に配列データがある場合
コード
下記のappsettings.jsonファイルを用意します。Config セクション内に配列のデータが記述されています。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Config": [
{
"id": 1,
"name": "Penguin Cookie"
},
{
"id": 2,
"name": "Camel Caramel"
},
{
"id": 3,
"name": "WhiteBear Icecream"
}
],
"AllowedHosts": "*"
}
プログラムのコードは以下です。
読み取るオブジェクトのクラスを実装します。
namespace AppSettingsObjectArray
{
public class ConfigItem
{
public int id { get; set; }
public string name { get; set; }
}
}
ASP.NET アプリケーション(.NET6)を作成して、Program.csに下記コードを記述します。
using AppSettingsObjectArray;
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");
ConfigItem[] confArray = section.Get<ConfigItem[]>();
string outputText = "<html><body>";
foreach (ConfigItem ci in confArray) {
outputText += string.Format("ID:{0:d} - Name:{1}<br/>",ci.id,ci.name);
}
outputText += "</body></html>";
app.MapGet("/", (HttpContext context) => {
context.Response.ContentType = "text/html";
return outputText;
});
app.Run();
解説
はじめに、appsettings.jsonファイルに記述されているオブジェクト型のクラスを実装します。
今回の例では、オブジェクトは "id"と"name" の2つのメンバ変数を持つオブジェクトのため、idとnameのメンバ変数を持つクラスを実装します。
なお、メンバはプロパティとして実装する必要があります。
namespace AppSettingsObjectArray
{
public class ConfigItem
{
public int id { get; set; }
public string name { get; set; }
}
}
appsettings.jsonファイルを読み込みセクションを読み込みます。appsettings.jsonから通常のデータを読み込む場合のコードと同様です。
詳細は
こちらの記事を参照して下さい。
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", true, true)
.Build();
IConfigurationSection section = configuration.GetSection("Config");
オブジェクト配列の値を読み込む場合は、IConfigurationSection の
Get<T>
メソッドを利用します。
オブジェクト配列の型は先ほど実装した ConfigItemクラスのため、
ConfigItem[]
を記述します。
ConfigItem[] confArray = section.Get<ConfigItem[]>();
なお、
T
に
List<ConfigItem>
を与えるコードでも同様に動作します。
List<ConfigItem> confArray = section.Get<List<ConfigItem>>();
以下のコードで appsettings.jsonから読み出した値をページに表示します。
string outputText = "<html><body>";
foreach (ConfigItem ci in confArray) {
outputText += string.Format("ID:{0:d} - Name:{1}<br/>",ci.id,ci.name);
}
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": [
{
"id": 101,
"name": "ふわふわ ソファー",
"price": "24,800"
},
{
"id": 102,
"name": "かるがる チェアー",
"price": "16,000"
},
{
"id": 103,
"name": "ひろびろ テーブル",
"price": "54,000"
},
{
"id": 104,
"name": "かための ベッド",
"price": "34,500"
},
{
"id": 105,
"name": "おしゃれ スタンド",
"price": "84,000"
}
]
},
"AllowedHosts": "*"
}
プログラムのコードは以下です。ASP.NET アプリケーション(.NET6)を作成します。
読み取るオブジェクトのクラスを実装します。
namespace AppSettingsObjectArrayValue
{
public class ProductsItem
{
public int id { get; set; }
public string name { get; set; }
public string price { get; set; }
}
}
Program.csに下記コードを記述します。
using AppSettingsObjectArrayValue;
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");
ConfigItem[] confArray = section.Get<ConfigItem[]>();
//List<ProductsItem> confArray = section.Get<List<ProductsItem>>(); //こちらでも可
string outputText = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /></head><body>";
foreach (ProductsItem pi in confArray) {
int cvalue;
int.TryParse(pi.price, System.Globalization.NumberStyles.AllowThousands, null, out cvalue);
outputText += string.Format("ID:{0:d} - Name:{1} - Price:{2:N}<br/>", pi.id, pi.name, cvalue);
}
outputText += "</body></html>";
app.MapGet("/", (HttpContext context) => {
context.Response.ContentType = "text/html";
return outputText;
});
app.Run();
解説
はじめに、appsettings.jsonファイルに記述されているオブジェクト型のクラスを実装します。
今回の例では、オブジェクトは "id"と"name" "price" の3つのメンバ変数を持つオブジェクトのため、id, name, priceのメンバ変数を持つクラスを実装します。
なお、メンバはプロパティとして実装する必要があります。
namespace AppSettingsObjectArrayValue
{
public class ProductsItem
{
public int id { get; set; }
public string name { get; set; }
public string price { get; set; }
}
}
appsettings.jsonファイルを読み込みセクションを読み込むコードは先の例と同じコードです。
セクション名の指定が先の例とは異なり、
(セクション名):(値のキー名)
の形式で指定します。
IConfigurationSection section = configuration.GetSection("AppData:Products");
取得したIConfigurationSection から値を呼び出すコードは先の例と同様に
Get<T>
メソッドを呼び出して値を取得します。
ConfigItem[] confArray = section.Get<ConfigItem[]>();
実行結果
プロジェクトを実行します。Webブラウザが起動し、下図のページが表示されます。appsettings.jsonファイルに記述した値がページに表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-10-31
作成日: 2022-10-31