使用Options.NET C#从应用程序设置访问Json数组



我已经搜索过了,也有类似的问题,但答案中有JSON数组,他们在控制器中使用IConfigure。我只能在"启动"中使用IConfigure

我在appsettings.json中有这个JSON数组

{
"EmailList":[
{
"name":"John Algovich",
"email":"John.Algovich@mail.com"
},
{
"name":"Petr Algr",
"email":"Petr.Algr@mail.com"
},
{
"name":"Mathew Cena",
"email":"Mathew.Cena@mail.com"
}
]
}

EmailList.cs:

public class EmailAddress {
public string Name { get; set; }
public string Email { get; set; }
}
public class EmailList {
public List<EmailAddress> EmailArray { get; set; }
}

Startup.cs中有很多注入,所以我使用了相同的代码:

services.Configure<EmailList>(Configuration.GetSection("EmailList"));

Controller:

public class DevController : Controller
{
private readonly EmailList _devEmailList;
private List<string> _emailList;
public DevController(
IOptions<EmailList> _devEmailList,
{
_devEmailList = devEmailList.Value; 

_emailList = new List<string>();
}
}
public IActionResult Index()
{
var result = _devEmailList; // Returns null
var mailData2 = JsonConvert.DeserializeObject<EmailList>(_devEmailList.EmailArray.ToString()); // Returns null
}

目标:如何使用Options在Controller中获取电子邮件地址并将其添加到列表中?

好的,所以我能够解决这个问题:

我用配置类保持了appsettings.json的原样。

我将Startup代码更改为:

EmailInfo[] emails = Configuration.GetSection("EmailList").Get<EmailInfo[]>();
services.Configure<EmailList>(options => {options.EmailArray = emails.ToList();});

在我的Controller:中

这保持相同的

public class DevController : Controller
{
private readonly EmailList _devEmailList;
private List<string> _emailList;
public DevController(
IOptions<EmailList> _devEmailList,
{
_devEmailList = devEmailList.Value; 

_emailList = new List<string>();
}
}

获取电子邮件:

public IActionResult Index() {
var result = _udeEmailList.EmailArray;
foreach (var mailInfo in result)
{
emailsList.Add(mailInfo.Email);
}
}

您作为节检索的是IEnumerable<EmailAddress>,而不是EmailList。阅读你写的内容,在你的配置中没有";EmailArray";释义

您可以在配置中添加另一个级别(如果您在该部分中有更多关于电子邮件配置的内容,则会很有用(,或者将类型更改为IEnumerable<EmailAddress>(不需要具体为IEnumerable,任何实现它的东西(如数组或列表(都可以(。

如果你选择第一个选项,你必须这样做:

在您的配置文件中。。。

{
"EmailConfig":{
"EmailList":[
{
"name":"John Algovich",
"email":"John.Algovich@mail.com"
},
{
"name":"Petr Algr",
"email":"Petr.Algr@mail.com"
},
{
"name":"Mathew Cena",
"email":"Mathew.Cena@mail.com"
}
]
//You can add here more properties
}
}

您的配置类:

public class EmailAddress
{
public string Name { get; set; }
public string Email { get; set; }
}
public class EmailConfig
{
public List<EmailAddress> EmailList { get; set; }
}

您的配置:

services.Configure<EmailConfig>(Configuration.GetSection("EmailConfig"));

控制器:

public class DevController : Controller
{
private readonly EmailConfig _mailConfig;
public DevController(IOptions<EmailConfig> mailConfig)
{
_mailConfig = mailConfig.Value;
}
public IActionResult Index()
{
var result = _mailConfig.EmailList;
}
}

最新更新