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
相关产品推荐
相关产品推荐

