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

如何使用Options模式绑定appsettings.json的JSON字符串并注入对象集合

实现步骤

你可以通过「先读取配置节点的JSON字符串、反序列化后手动注册Options服务」的方式实现需求,不需要修改现有配置存储格式和实体类定义。

核心配置代码

在Startup.cs的ConfigureServices方法中添加如下代码:

using Microsoft.Extensions.Options;
using System.Text.Json;

public void ConfigureServices(IServiceCollection services)
{
    // 项目中已有的其他服务注册逻辑,比如AddControllers()等
    // services.AddControllers();

    // 1. 绑定原有的MappingCode配置节点,其他地方需要用到该配置时可保留,不需要可以跳过这步
    services.Configure<MappingCode>(Configuration.GetSection("MappingCodes"));

    // 2. 读取存储的转义JSON字符串,反序列化为Product集合
    var systemOneJsonStr = Configuration.GetValue<string>("MappingCodes:SystemOne");
    var products = JsonSerializer.Deserialize<List<Product>>(
        systemOneJsonStr, 
        new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
    ) ?? new List<Product>();

    // 3. 注册IOptions<IList<Product>>服务实例
    services.AddSingleton<IOptions<IList<Product>>>(Options.Create<IList<Product>>(products));
}

补充说明

  • 如果你项目中使用Newtonsoft.Json做序列化,只需要把反序列化的代码替换为JsonConvert.DeserializeObject<List<Product>>(systemOneJsonStr) ?? new List<Product>()即可,记得引入Newtonsoft.Json命名空间。
  • 如果你需要配置热更新(修改appsettings.json后无需重启应用自动刷新配置值),建议注入IOptionsMonitor<IList<Product>>替代IOptions<IList<Product>>,注册时配置变更监听逻辑即可,默认的IOptions是单例注册不会感知配置变更。
  • 注册完成后即可完全按照你给出的示例代码,直接在类构造函数中注入IOptions<IList<Product>>使用,Value属性就是反序列化完成的Product集合。

内容的提问来源于stack exchange,提问作者O'Neil Tomlinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:42:15