2016-12-26 2 views
16

наследуют IConfiguration В appsettings.jsonASP .NET Ядро Получить 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 Как получить массив?

ответ

18

Если вы хотите, чтобы выбрать значение первого элемента, то вы должны сделать, как this-

var item0 = _config.GetSection("MyArray:0"); 

Если вы хотите, чтобы выбрать значение всего массива, то вы должны сделать, как this-

IConfigurationSection myArraySection = _config.GetSection("MyArray"); 
var itemArray = myArraySection.AsEnumerable(); 

В идеале вам следует подумать об использовании options pattern, предложенного официальной документацией. Это даст вам больше преимуществ.

7

Добавить уровень в вашем 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); 
    } 
} 

аспида.Служба внедрения зависимостей NET сердечника работает как шарм :)

7

Если у вас есть массив сложных объектов 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"); 
} 
0

Вы можете получить массив напрямую без увеличения нового уровня в конфигурации:

public void ConfigureServices(IServiceCollection services) { 
    services.Configure<List<String>>(Configuration.GetSection("MyArray")); 
    //... 
} 
12

Вы можете в стойло следующие два пакета NuGet:

Microsoft.Extensions.Configuration  
Microsoft.Extensions.Configuration.Binder 

И тогда вы будете иметь возможность использовать следующий метод расширения:

var myArray = _config.GetSection("MyArray").Get<string[]>(); 
Смежные вопросы