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

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

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

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

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

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

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

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

8 ответов

22 просмотра
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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта