asp5 IConfigurationRoot get json array asp5 IConfigurationRoot get json array asp.net asp.net

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");}