@aleksey_semenov
разработчик C#

Есть ли библиотека на C# позволяющая десериализовать строку table.Snap[0].HolidayEnable=false?

Есть ли библиотека на C# позволяющая десериализовать строку table.Snap[0].HolidayEnable=false в объект
class Table
{
    public Snap[] Snaps {get; set;}
}

class Snap
{
   public bool HolidayEnable {get; set;}
}
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 4
Wyrd
@Wyrd
Архитектор
То что вы хотите, в целом возможно при условии что вы готовы подключить Roslyn (компилятор C#) в вашу программу - он может скомпилировать и выполнить произвольное выражение на лету (при этом, вы можете предать на вход произвольные данные из вашей программы (тот же Table) в качестве "глобальных переменных" для исполняемого выражения). Вот пример: https://stackoverflow.com/questions/46524379/creat...

С другой стороны, такие штуки обычно не применяют в продакшен коде - если вы напишите, что вам надо сделать "на уровне бизнеса", возможно кто-то сможет посоветовать более адекватное решение
Ответ написан
@mletov
Обычно в языках программирования есть функция eval или что-нибудь в этом роде.
Она позволяет выполнить строку как код.
И любая документация по ней начинается со слов "Никогда не используйте эту функцию" ;)
Ответ написан
firedragon
@firedragon
Senior .NET developer
Кроме того что есть куча сериализаторов которые конечно не дадут строки можно сделать свой Что то типа

Static Table Desirialize( string file)

table.Snap[0].HolidayEnable=false

Что делает метод считывает все строчки
Смотрит что там в скобках
Создаёт массив снэпов
Потом пробегается по этой вашей строке парсит значение и записывает в объект.

Но! Это извращение . Перепишите свой код на нормальный серализатор и все будет решатся одной строкой кода
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Это называется не сериализация а мапинг.
var table = new Table() { Snaps = table.Snap.Select(s => new Snap() {HolidayEnable = s.HolidayEnable}).ToArray()};

Примерно так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы