Как десериализовать объекты YAML в классы C# на основе имени ключаC#

Место общения программистов C#
Ответить
Гость
 Как десериализовать объекты YAML в классы C# на основе имени ключа

Сообщение Гость »


Я пытаюсь использовать YamlDotNet для десериализации массива объектов в классы C# на основе ключа этих объектов.

У меня есть такой YAML:

шаги: - запуск: имя: приложение - нажмите: название: кнопка повтор: 2 - установить значение: имя: поле значение: тест А затем некоторые классы/интерфейсы C#, подобные этому:

публичный класс Runner { public IEnumerable Шаги {get; набор; } = новый список(); } общедоступный интерфейс IStep { } Запуск публичного класса: IStep { общедоступная строка Имя {get; набор; } = строка.Пусто; } публичный класс Click: IStep { общедоступная строка Имя {get; набор; } = строка.Пусто; общественный ИНТ Повторить {получить; набор; } = 1; } общедоступный класс SetValue: IStep { общедоступная строка Имя {get; набор; } = строка.Пусто; общедоступная строка Value {get; набор; } = строка.Пусто; } Используя YamlDotNet, я пытался десериализовать с помощью WithTypeDiscriminationNodeDeserializer с помощью такого десериализатора:

новый DeserializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .WithTypeDiscrimatingNodeDeserializer((options) => { Dictionary keyMappings = new() { { "запуск", typeof(Запуск) }, { "клик", typeof(Клик) }, { "setValue", typeof(SetValue) }, }; options.AddUniqueKeyTypeDiscriminator(keyMappings); }) .Строить(); Но это не удается из-за Ошибка: свойство «запуск» не найдено для типа «Models.Launch». Судя по документации для AddUniqueKeyTypeDiscriminator, это правильное поведение, поскольку в этих примерах есть свойства с именами, равными этим ключам, но я надеялся избежать этого ненужного переноса, как мне этого добиться?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»