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

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

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

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

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

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

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

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

8 ответов

10 просмотров
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

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

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта