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

如何从appsettings.json读取未命名JSON数组并转换为元组集合

解决方案

你之前的写法存在两个核心问题:

  1. GetValue<T>() 仅支持读取字符串、数字等简单类型的配置值,无法绑定数组、列表、字典这类复杂结构,复杂结构绑定需要使用IConfigurationSection自带的Get<T>()扩展方法。
  2. 直接遍历Items节点的子节点时,拿到的第一层子节点的Key是数组的索引(0、1、2...),Value为空,因为每个数组元素本身是嵌套的JSON对象,需要再取一层子节点才能拿到实际的键值对。

最简实现方案

直接通过两层配置遍历拿到目标元组数组:

(string Key, string Value)[] items = config.GetSection("Items")
    .GetChildren()
    // 每个数组元素是仅含一个键值对的对象,取其第一个子节点即可
    .Select(itemSection => itemSection.GetChildren().First())
    .Select(kvSection => (kvSection.Key, kvSection.Value))
    .ToArray();

备选绑定方案

如果希望借助配置自带的绑定能力,先绑定为字典列表再转换:

// 注意这里用的是.Get<T>()不是GetValue<T>()
List<Dictionary<string, string>> itemDicts = config.GetSection("Items").Get<List<Dictionary<string, string>>>();
(string Key, string Value)[] items = itemDicts
    .Select(d => d.First())
    .Select(kv => (kv.Key, kv.Value))
    .ToArray();

两种方案都可以正常拿到你需要的元组数组,输出测试结果符合预期:

(fruit, apple), (fruit, cherry), (fruit, tomato), (vegetable, carrot), (vegetable, tomato)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:18:03