如何从appsettings.json读取含动态Params参数的配置并绑定到对应类?
第一步:修正JSON配置语法错误
你当前的appsettings.json存在两处语法问题,会直接导致绑定失败:
APIConfig节点下多了一层不必要的大括号- POST接口的
Params节点最后一个属性末尾多了冗余逗号
修正后的配置如下:
"APIConfig": { "RootAPI": "https://hub.dummyapis.com", "API": [ { "Url": "/employee", "Method": "GET", "Params": { "noofRecords": 10, "idStarts": 1001 }, "RequestType": "application/json", "Headers": null }, { "Url": "/student", "Method": "POST", "Params": { "name": "ABC", "adress": "bla bla bla", "IsPassed": true }, "RequestType": "application/json", "Headers": null } ] }
第二步:调整类定义匹配配置结构
你当前的APIConfig类只能匹配单条API的配置,和实际配置的层级不对应,需要拆分为两个类。同时.NET的配置绑定系统原生不支持直接映射dynamic类型,需要将Params替换为支持动态结构的兼容类型:
// 单条API的配置类 public class APIOption { public string Url { get; set; } public string Method { get; set; } // 用JsonElement接收任意结构的参数,.NET 6+原生支持配置绑定 public JsonElement Params { get; set; } public string RequestType { get; set; } public List<RequestHeaders> Headers { get; set; } } // 对应配置文件中APIConfig根节点的配置类 public class APIConfigRoot { public string RootAPI { get; set; } public List<APIOption> API { get; set; } }
如果你的项目版本低于.NET 6,也可以将Params定义为Dictionary<string, object>,配置绑定系统同样支持将任意结构的JSON对象映射为字典。
第三步:读取配置
直接绑定到根配置类即可:
var apiConfig = _builder.GetSection("APIConfig").Get<APIConfigRoot>();
动态参数使用方式
- 如果你用
JsonElement类型,可以直接读取对应属性的值,也可以直接序列化后作为API请求的参数:
// 读取指定参数 var employeeParams = apiConfig.API.First(x => x.Url == "/employee").Params; int recordCount = employeeParams.GetProperty("noofRecords").GetInt32(); // 直接序列化为JSON字符串用于请求 string paramJson = JsonSerializer.Serialize(employeeParams);
- 如果你用
Dictionary<string, object>类型,直接通过键取值即可:
int recordCount = (int)employeeParams["noofRecords"];
内容的提问来源于stack exchange,提问作者Hardipsinh Jadeja
相关产品推荐
相关产品推荐

