2016-12-26 144 views
16

JSON数组在appsettings.jsonASP .NET核心获取使用IConfiguration

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

上面有我的代码,我得到空 如何获得数组?

回答

18

如果你想选择第一项的值,那么你应该做的像这个 -

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

如果你想选择整个阵列的值,那么你应该做的像这个 -

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

的ASP。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[]>();