You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7 C#中使用Options模式绑定对象数组遇空值问题求解

问题根源

你的配置结构与Options类的结构不匹配:appsettings.json中的AdminEmails直接是一个数组,但AdminEmailsOptions类是一个包含AdminEmails数组属性的对象,配置绑定框架无法将数组直接映射到包含数组属性的对象上,导致_adminEmailsOptions为空。

解决方案

方案一:调整配置文件结构,匹配Options类

修改appsettings.json,将数组包裹在与Options类对应的节点下:

{
  "AdminEmailsOptions": {
    "AdminEmails": [
      {
        "Name": "John",
        "Email": "john@gmail"
      },
      {
        "Name": "Daniel",
        "Email": "daniel@gmail.com"
      }
    ]
  }
}

更新Program.cs中的注册代码,指向新的配置节点:

builder.Services.Configure<AdminEmailsOptions>(builder.Configuration.GetSection("AdminEmailsOptions"));

此时配置节点结构与AdminEmailsOptions类完全对应,绑定后即可正确获取数组数据。

方案二:直接绑定数组,简化Options结构

如果不想修改配置文件,可以直接将数组绑定到集合类型,无需外层的AdminEmailsOptions类:

  1. 更新Program.cs的注册代码:
builder.Services.Configure<List<AdminEmail>>(builder.Configuration.GetSection("AdminEmails"));
  1. 修改HomeController的注入代码:
public class HomeController : Controller
{        
    private readonly List<AdminEmail> _adminEmails;
    public HomeController(IOptions<List<AdminEmail>> adminEmails)
    {            
        _adminEmails = adminEmails.Value;
    }
}

这样可以直接获取配置中的数组列表,无需额外的外层类。

注意:配置中john@gmail缺少.com后缀,虽不影响配置绑定,但可能导致后续邮件功能异常,建议补充完整。

内容的提问来源于stack exchange,提问作者Simant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:17:49