Как десериализовать список пары ключ / значение в файле yaml с помощью 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; }
}

какой тип я могу использовать для правильной десериализации свойства параметров, чтобы вывести список пары ключ / значение? И какой же способ лучше получить значение, используя ключ?

это код 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 ответ

Решение

Каждая пара ключ-значение является отображением с одной записью в YAML (для отдельных пар ключ-значение не существует отдельной структуры). Следовательно, parameters должен быть List>`.

Если вы хотите просто иметь возможность запрашивать значение каждого ключа, вы должны отбросить последовательность и сделать ее единым сопоставлением YAML:

parameters:
  firstKey: value1
  secondKey: value2

Это будет десериализовать Dictionary<string,string> который вы можете запросить значения. Однако порядок параметров теряется тогда.

Если вам нужно сохранить порядок параметров, вам нужно сохранить последовательность YAML, содержащую пары ключ-значение, и десериализовать в OrderedDictionary<string,string> - afaik YamlDotNet не поддерживает это напрямую, но вы можете использовать оригинальную структуру (List<Dictionary<string,string>>) и создать OrderedDictionary из него.

Другие вопросы по тегам