Как включить синтаксический анализ yaml с помощью yamldotnet, который принимает пары списка и значения ключа под одним и тем же именем?

У меня есть yaml, в котором допустимы оба следующих формата:

  args:
    buildno: 1
    gitcommithash: cdc3b19

И

  args:
    - buildno=1
    - gitcommithash=cdc3b19

С текущей YamlDotnet конфигурацией,

[YamlMember(Alias = "args")]
public Dictionary<string, string> Args { get; set; }

Я могу разобрать, когда yaml имеет формат №. 1. Как я могу изменить свой код YamlDotNet, чтобы он принимал оба формата? то есть принимать список, а также словарь для аргументов?


person Pratik    schedule 30.09.2019    source источник


Ответы (1)


Самый простой способ сделать это — создать класс, реализующий как IDictionary<string, string>, так и IList<string>. Вы можете попробовать наследоваться от Dictionary<string, string> и реализовать интерфейс списка. Думаю, достаточно было бы реализовать метод Add из IList, где вы разбиваете строку по символу = и добавляете в словарь.

Есть и другие способы, но это самый простой.

person Antoine Aubry    schedule 01.10.2019