我有一个附加到VCAP_SERVICES环境变量的json字符串,如下所示:
{
"redislabs": [
{
"credentials": {
"host": "redis-1756.pcfredissb2.com",
"ip_list": [
"10.999.46.999"
],
"password": "cz(2u",
"port": 1756
},
"syslog_drain_url": null,
"volume_mounts": [],
"label": "redislabs",
"provider": null,
"plan": "simple-redis",
"name": "sdsredis2",
"tags": [
"redislabs"
]
},
{
"credentials": {
"host": "redis-13610.pcfredis.com",
"ip_list": [
"10.999.46.9999"
],
"password": "n-C*",
"port": 13610
},
"syslog_drain_url": null,
"volume_mounts": [],
"label": "redislabs",
"provider": null,
"plan": "simple-redis",
"name": "sdsredis",
"tags": [
"redislabs"
]
}
]
}
在ConfigureServices
的{{1}}中,当我运行Startup.cs
时,我得到的内容如下:
我有一些看起来像这样的选项:
Configuration.GetSection("redislabs").AsEnumerable()
我的问题是如何在这样的事情上执行绑定?是否可以绑定一个对象数组?
我试过了:
public class RedisLabs
{
public RedisLab[] redislabs { get; set; }
}
public class RedisLab
{
public Credentials credentials { get; set; }
public object syslog_drain_url { get; set; }
public object[] volume_mounts { get; set; }
public string label { get; set; }
public object provider { get; set; }
public string plan { get; set; }
public string name { get; set; }
public string[] tags { get; set; }
}
public class Credentials
{
public string host { get; set; }
public string[] ip_list { get; set; }
public string password { get; set; }
public int port { get; set; }
}
和
var redislabs = new List<RedisLab>();
Configuration.GetSection("redislabs").Bind(redislabs);
以及其他一些方法。似乎没什么用。
Halp,plz。
答案 0 :(得分:0)
鉴于您的json文件和类,这应该可行(将顶级部分绑定到包含该数组的类的实例):
var redisLabs = new RedisLabs();
Configuration.Bind(redisLabs);
这也有效:
services.Configure<RedisLabs>(Configuration);
...
var rlOptions = app.ApplicationServices.GetRequiredService<IOptions<RedisLabs>>();
var redisLabs = rlOptions.Value;