asp5 IConfigurationRoot get json array
We can now use GetSection
with GetChildren
and some LINQ.
// appsettings.json{ "SomeArray": [ "Foo", "Bar", "Baz" ]}// Startup.csvar someArray = configuration .GetSection("SomeArray") .GetChildren() .Select(x => x.Value) .ToArray();
There is also a demo in the Configuration repository's ArrayTest.
try this out:
using Microsoft.AspNet.Builder;using Microsoft.AspNet.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;using Microsoft.Extensions.OptionsModel;using System.Collections.Generic;namespace WebApplication1{ public class Startup { public Startup(IHostingEnvironment env) { // Set up configuration sources. var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile("extraData.json") .AddEnvironmentVariables(); Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; set; } public void ConfigureServices(IServiceCollection services) { services.AddOptions(); services.Configure<List<ExtraData>>(Configuration.GetSection("ExtraData")); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { List<ExtraData> result = app.ApplicationServices.GetRequiredService<IOptions<List<ExtraData>>>().Value; // you should get what you need. It works in my computer with rc1 update 1 } public static void Main(string[] args) => WebApplication.Run<Startup>(args); } public class ExtraData { public int Id { get; set; } public string Description { get; set; } }}
EDIT
If compiler complains services.Configure<List<ExtraData>>(Configuration.GetSection("ExtraData"))
, please add a NuGet reference to Microsoft.Extensions.Options.ConfigurationExtensions
You may also inject it into constructor:
// using Microsoft.Extensions.Options;public class HomeController : Controller{ private List<ExtraData> _extraData; public HomeController(IOptions<List<ExtraData>> extraData) { _extraData = extraData.Value; }}
You can retrieve settings this way:
var extraDataSection = configuration.GetSection("ExtraData");foreach (IConfigurationSection section in extraDataSection.GetChildren()){ var id = section.GetValue<int>("Id"); var description = section.GetValue<string>("Description");}