如何使用YamlDotNet反序列化yaml文件中的键/值对列表

时间:2019-01-29 22:27:54

标签: yaml deserialization yamldotnet

嗨,我正在使用YamlDotNet反序列化yml文件,如下所示:

name: element name
description: something to describe

parameters:
- firstKey: value1
- secondKey: value2

这是用于反序列化的.net类:

class MyElement
{
    public string name { get; set; }
    public string description { get; set; }
    public ??? parameters { get; set; }
}

我可以使用哪种类型来正确反序列化parameters属性以列出键/值对数组? 接下来,使用密钥检索值的更好方法是什么?

这是要反序列化的C#代码:

using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
...
var deser = new DeserializerBuilder().WithNamingConvention(new CamelCaseNamingConvention()).Build();
var reader = File.OpenText(pathToFileYml);
var data = deser.Deserialize<MyElement>(reader);    

预先感谢

1 个答案:

答案 0 :(得分:0)

每个键值对都是一个映射,在YAML中只有一个条目(单个键值对没有单独的结构)。因此,parameters应该是List>`。

如果只想查询每个键的值,则应删除序列并将其设为单个YAML映射:

parameters:
  firstKey: value1
  secondKey: value2

这将反序列化为Dictionary<string,string>,然后您可以查询其值。但是,然后失去了参数的顺序。

如果需要保留参数的顺序,则需要保留包含键值对的YAML序列并反序列化为OrderedDictionary<string,string> – afaik YamlDotNet不直接支持此操作,但是您可以使用原始的结构(List<Dictionary<string,string>>并从中构建一个OrderedDictionary。