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

.NET Core中如何从appsettings.json获取对象内的集合属性值

问题解决:.NET Core配置绑定集合为null的问题

核心原因是配置节点名称与类属性名称不匹配:

  • appsettings.json中集合节点名为LinesOfBusiness
  • 类中属性名为LineOfBusinesses
    .NET Core配置绑定默认按名称匹配(大小写不敏感,但单复数差异会导致匹配失败),因此集合无法被正确绑定,而其他字符串属性因名称一致可正常绑定。

以下两种方案都能让集合直接通过构造函数注入的IOptions获取,无需单独绑定:

方案1:修改类属性名称与配置节点一致

调整CroutonStripePaymentGatewayOptions类的集合属性名称,与配置里的LinesOfBusiness保持一致:

public class CroutonStripePaymentGatewayOptions
{
    public string ApiBasePath { get; set; }
    public string XApiKey { get; set; }
    // 修改属性名匹配配置节点
    public List<LineOfBusiness> LinesOfBusiness { get; set; }
    public string CreatePostUrl { get; set; }
    public string UpdatePostUrl { get; set; }
}

public class LineOfBusiness
{
    public string Name { get; set; }
    public string WebhookSecretKey { get; set; }
}

方案2:用特性指定配置键名称(无需修改属性名)

如果不想改动属性名称,可以使用[ConfigurationKeyName]特性(.NET Core 3.1+支持),显式指定该属性对应的配置节点名称:

using Microsoft.Extensions.Configuration;

public class CroutonStripePaymentGatewayOptions
{
    public string ApiBasePath { get; set; }
    public string XApiKey { get; set; }
    // 用特性指定配置节点名
    [ConfigurationKeyName("LinesOfBusiness")]
    public List<LineOfBusiness> LineOfBusinesses { get; set; }
    public string CreatePostUrl { get; set; }
    public string UpdatePostUrl { get; set; }
}

public class LineOfBusiness
{
    public string Name { get; set; }
    public string WebhookSecretKey { get; set; }
}

简化配置绑定代码

原Program.cs的绑定代码可简化为更直观的写法,效果完全一致:

builder.Services.Configure<CroutonStripePaymentGatewayOptions>(
    builder.Configuration.GetSection("PaymentGateways:CroutonStripe"));

完成以上修改后,注入IOptions<CroutonStripePaymentGatewayOptions>时,集合属性会自动正确绑定,无需单独处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:02:28