Appsettings.json内
{
"MyArray": [
"str1",
"str2",
"str3"
]
}
Startup.csに
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfiguration>(Configuration);
}
HomeControllerで
public class HomeController : Controller
{
private readonly IConfiguration _config;
public HomeController(IConfiguration config)
{
this._config = config;
}
public IActionResult Index()
{
return Json(_config.GetSection("MyArray"));
}
}
上記の私のコードがあります、私はnullになりました配列を取得する方法?
あなたが最初の項目の値を選びたいなら、あなたはこのようにするべきです -
var item0 = _config.GetSection("MyArray:0");
あなたが全体の配列の値を選びたいなら、あなたはこのようにするべきです -
IConfigurationSection myArraySection = _config.GetSection("MyArray");
var itemArray = myArraySection.AsEnumerable();
理想的には、公式文書で提案されている options pattern の使用を検討するべきです。これはあなたにもっと利益を与えます。
次の2つのNuGetパッケージをインストールできます。
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Binder
そして、次のような拡張方法を使うことができます。
var myArray = _config.GetSection("MyArray").Get<string[]>();
Appsettings.jsonにレベルを追加します。
{
"MySettings": {
"MyArray": [
"str1",
"str2",
"str3"
]
}
}
あなたのセクションを表すクラスを作成します。
public class MySettings
{
public List<string> MyArray {get; set;}
}
アプリケーション起動クラスで、モデルをバインドしてDIサービスに挿入します。
services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
そして、あなたのコントローラで、DIサービスからあなたの設定データを取得します。
public class HomeController : Controller
{
private readonly List<string> _myArray;
public HomeController(IOptions<MySettings> mySettings)
{
_myArray = mySettings.Value.MyArray;
}
public IActionResult Index()
{
return Json(_myArray);
}
}
すべてのデータが必要な場合は、設定モデル全体をコントローラのプロパティに保存することもできます。
public class HomeController : Controller
{
private readonly MySettings _mySettings;
public HomeController(IOptions<MySettings> mySettings)
{
_mySettings = mySettings.Value;
}
public IActionResult Index()
{
return Json(_mySettings.MyArray);
}
}
ASP.NET Coreの依存性注入サービスは、魅力のように機能します。
このような複雑なJSONオブジェクトの配列があるとします。
{
"MySettings": {
"MyValues": [
{ "Key": "Key1", "Value": "Value1" },
{ "Key": "Key2", "Value": "Value2" }
]
}
}
このようにして設定を取得することができます。
var valuesSection = configuration.GetSection("MySettings:MyValues");
foreach (IConfigurationSection section in valuesSection.GetChildren())
{
var key = section.GetValue<string>("Key");
var value = section.GetValue<string>("Value");
}
これは私の設定から文字列の配列を返すために私のために働いた:
var allowedMethods = Configuration.GetSection("AppSettings:CORS-Settings:Allow-Methods")
.Get<string[]>();
私の設定セクションはこのようになります:
"AppSettings": {
"CORS-Settings": {
"Allow-Origins": [ "http://localhost:8000" ],
"Allow-Methods": [ "OPTIONS","GET","HEAD","POST","PUT","DELETE" ]
}
}
構成から複雑なJSONオブジェクトの配列を返す場合は、 @ djangojazz's answer をタプルではなく匿名型と動的型を使用するように調整しました。
次の設定セクションがあるとします。
"TestUsers": [
{
"UserName": "TestUser",
"Email": "[email protected]",
"Password": "P@ssw0rd!"
},
{
"UserName": "TestUser2",
"Email": "[email protected]",
"Password": "P@ssw0rd!"
}],
このようにしてオブジェクト配列を返すことができます。
public dynamic GetTestUsers()
{
var testUsers = Configuration.GetSection("TestUsers")
.GetChildren()
.ToList()
.Select(x => new {
UserName = x.GetValue<string>("UserName"),
Email = x.GetValue<string>("Email"),
Password = x.GetValue<string>("Password")
});
return new { Data = testUsers };
}
古い質問ですが、C#7標準の.NET Core 2.1用に更新された答えを出すことができます。次のようなappsettings.Development.jsonにのみリストがあるとします。
"TestUsers": [
{
"UserName": "TestUser",
"Email": "[email protected]",
"Password": "P@ssw0rd!"
},
{
"UserName": "TestUser2",
"Email": "[email protected]",
"Password": "P@ssw0rd!"
}
]、
Microsoft.Extensions.Configuration.IConfigurationが実装され、次のように配線されていれば、どこでもそれらを抽出できます。
var testUsers = Configuration.GetSection("TestUsers")
.GetChildren()
.ToList()
//Named Tuple returns, new in C# 7
.Select(x =>
(
x.GetValue<string>("UserName"),
x.GetValue<string>("Email"),
x.GetValue<string>("Password")
)
)
.ToList<(string UserName, string Email, string Password)>();
今私はよくタイプされているよくタイプされたオブジェクトのリストを持っています。 testUsers.First()を実行すると、Visual Studioは 'UserName'、 'Email'、および 'Password'のオプションを表示するはずです。
ASP.NET Core 2.2以降では、アプリケーションのどこにでもIConfigurationを挿入できます。たとえば、HomeControllerにIConfigurationを挿入し、これを使用して配列を取得できます。
string[] array = _config.GetSection("MyArray").Get<string[]>();
設定で新しいレベルを増やさずに直接配列を取得できます。
public void ConfigureServices(IServiceCollection services) {
services.Configure<List<String>>(Configuration.GetSection("MyArray"));
//...
}
ショートフォーム:
var myArray= configuration.GetSection("MyArray")
.AsEnumerable()
.Where(p => p.Value != null)
.Select(p => p.Value)
.ToArray();
文字列の配列を返します。
{"str1"、 "str2"、 "str3"}