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

C#中如何使用YamlDotNet读取YAML动态键值对并遍历输出?

问题原因

你直接对List<Dictionary<string, string>>类型的对象调用ToString()方法时,C# 会默认返回该类型的完整名称字符串,不会自动遍历输出集合内部存储的实际数据,这是.NET 中复杂引用类型的默认行为,和 YamlDotNet 的反序列化逻辑无关——你当前的反序列化代码本身已经可以正确读取YAML内容,只是输出方式错误。

实现方案

你当前定义的Configuration类结构完全适配目标YAML格式,支持用户自由增删配置项,不需要修改模型定义,只需要调整输出逻辑,手动遍历反序列化得到的集合,逐个读取键值对即可。
修改后的完整代码如下:

public void ConfigHandler()
{
    var deserializer = new YamlDotNet.Serialization.DeserializerBuilder()
        .WithNamingConvention(CamelCaseNamingConvention.Instance)
        .Build();
    // 替换为实际配置文件路径
    var config = deserializer.Deserialize<Configuration>(File.ReadAllText("filepath"));

    // 遍历枚举所有键值对
    int groupIndex = 1;
    foreach (var paramGroup in config.parameters)
    {
        Console.WriteLine($"第{groupIndex}组配置:");
        foreach (var keyValuePair in paramGroup)
        {
            Console.WriteLine($"  键名:{keyValuePair.Key},对应值:{keyValuePair.Value}");
        }
        groupIndex++;
    }
}

class Configuration
{
    public List<Dictionary<string, string>> parameters { get; set; }
}
适配说明

针对你给出的示例YAML,上述代码运行后的输出为:

第1组配置:
  键名:firstKey,对应值:value1
第2组配置:
  键名:secondKey,对应值:value2

如果用户后续自由修改YAML内容,比如新增分组、在同一分组下新增多个键值对:

parameters:
- firstKey: value1
  extraKey: extraValue
- secondKey: value2
- thirdKey: value3
  fourthKey: value4

程序不需要做任何代码调整,就能自动识别并枚举所有新增的键值对,完全满足灵活配置的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:45:51