【问题标题】:How to deserialize a list of key/value pair in yaml file with YamlDotNet如何使用 YamlDotNet 反序列化 yaml 文件中的键/值对列表
【发布时间】:2019-01-29 22:27:54
【问题描述】:

您好,我正在使用 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; }
}

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

这是要反序列化的 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);    

提前致谢

【问题讨论】:

    标签: yaml deserialization yamldotnet


    【解决方案1】:

    每个键值对都是一个映射,在 YAML 中有一个条目(单个键值对没有单独的结构)。因此,parameters 应该是 List&lt;Dictionary&lt;string,string&gt;&gt;

    如果您想简单地查询每个键的值,您应该删除该序列并使其成为单个 YAML 映射:

    parameters:
      firstKey: value1
      secondKey: value2
    

    这将反序列化为Dictionary&lt;string,string&gt;,然后您可以查询其值。但是,参数的顺序会丢失。

    如果您需要保留参数的顺序,您需要保留包含键值对的 YAML 序列并反序列化为 OrderedDictionary&lt;string,string&gt; - afaik YamlDotNet 不直接支持此功能,但您可以使用原始结构 ( List&lt;Dictionary&lt;string,string&gt;&gt;) 并从中建立一个 OrderedDictionary。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多