170 похожих чатов

Всем привет, сегодня уже спрашивал, но опишу ситуацию более

развернуто. Приветствуется мнение экспертов.

Каким способом лучше всего преобразовывать данные на входе в объект класса, с точки зрения скорости, архитектурной расширяемости, читаемости?

Необходимо: преобразовать List<IList<object>> в кастомный тип

Есть набор данных, строки, целые числа, перечисления, дата и время, которые представлены в виде строк, но которые нужно будет преобразовать в свойства объекта, так как это делается с использованием десериализации JSON, XML.
! Нужно учитывать, что у даты может быть культура, что число с запятой может быть в формате 12 000,12 и другие особенности преобразования.

Способы которые я вижу.
1. Для каждого типа реализовать кастомный TypeDescriptor класс и потом использовать.
Как по мне интересная реализация, можно в любом месте юзать не указывая явно, так как провайдер знает, что конкретному типу есть уже конвертер.

2. Реализовать интерфейс ISerializable для каждого из типов и класс Сереализатор, наподобие

8 ответов

29 просмотров
Valentin Marchuk- Автор вопроса
Valentin Marchuk- Автор вопроса

Продолжение. 2. Реализовать интерфейс ISerializable для каждого из типов и класс Сереализатор, наподобие JsonSerializer Ниче про это не знаю, но мне кажется тоже структуру привносит в проект 3. Написать утилиту со статическим методом и не париться, обрабатывать данные через If else и рефлексией создать объект типа (рис 2.) Не очень нравится, на if else ветвления уходит много строк кода и моя утилита уже разрослась до 600 строк, а я использую только 4 типа На рис. 1 показана схема преобразования для наглядности.

Valentin Marchuk- Автор вопроса
Valentin Marchuk
Продолжение. 2. Реализовать интерфейс ISerializab...

Если есть статьи какие-то интересные на тему преобразования или еще что-то, буду рад почитать

Valentin Marchuk
screenshot

Вспомнилось, на стажировку контура был тип ConcurrentDictionary<string,ConcurrentDictionary<string,ConcurrentDictionary<ConcurrentDictionary<string,string> постоянные флншбеки вложенности

Valentin Marchuk
screenshot

Я делал что-то подобное Генерировался некий шаблон в котором помимо основных настроек были объекты. Каждый объект имел структуру {тип; объект}. При десериализации из жсона использовался кастомный конвертер для шаблона который знал о всех кастомных конвертерах для каждого известного типа и на основе типа отдавал объект соответствующему конвертеру. Из минусов: - сложно для понимания - в объекте шаблона был список ITemplateItem'ов что требовало доп проверок и кастов Из плюсов: - единый подход парсинга - безопасно - максимально кастомизируемо без лишних танцев. Добавил класс/структуру для нового типа, реализовал конвертер и зарегал его

Valentin Marchuk
screenshot

Я тут ожидаю увидеть какую-то генерическую штуку на рефлекшене.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта