在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"));
}
}
上面是我的代码。结果是零。
如何获取数组?
设置。json文件:
{
"AppSetting": {
"ProfileDirectory": "C:/Users/",
"Database": {
"Port": 7002
},
"Backend": {
"RunAsAdmin": true,
"InstallAsService": true,
"Urls": [
"http://127.0.0.1:8000"
],
"Port": 8000,
"ServiceName": "xxxxx"
}
}
}
code
代码:
public static IConfigurationRoot GetConfigurationFromArgs(string[] args, string cfgDir)
{
var builder = new ConfigurationBuilder()
.SetBasePath(cfgDir)
.AddCommandLine(args ?? new string[0]) // null in UnitTest null will cause exception
.AddJsonFile(Path.Combine(cfgDir, "setting.json"), optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
// .AddInMemoryollection(configDictionary)
;
var config = builder.Build();
return config;
}
你可以使用services.AddOptions<AppSettingOption>("AppSetting")或者直接从iconfigationroot对象获取Object。
var cfg = GetConfigurationFromArgs(args, appDataDirectory);
cfg.GetSection("AppSetting").Get<AppSettingOption>()
输出:
{App.AppSettingOption}
Backend: {App.BackendOption}
Database: {App.DatabaseOption}
ProfileDirectory: "C:/Users/"
在IOptions不起作用后,我发现这更简单,序列化时要做的事情也少得多。
//appsettings.json
"DatabaseModelCreationOptions": {
"Users": [
{
"Id": "1",
"UserName": "adminuser",
"Email": "youremail@myemail.com",
"Password": "!Ch4",
"Player": "Admin",
"PlayerInitials": "ADMIN",
"ApiKey": "40753ey"
}
],
"UserRoles": [
{
"Id": "af9986df",
"Name": "Admin",
"ConcurrencyStamp": "ddd53170"
},
{
"Id": "03b82b0e",
"Name": "Manager",
"ConcurrencyStamp": "65da3f89"
}
]
}
我需要的类,我不需要给你们看嵌套的类属性,你们可以在上面看到。
public class DatabaseModelCreationOptions
{
public IEnumerable<User>? Users { get; set; }
public IEnumerable<UserRole>? UserRoles { get; set; }
}
然后调用GetSection("")。得到
var dbOptions = configuration.GetSection("DatabaseModelCreationOptions")
.Get<DatabaseModelCreationOptions>();