powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Class from XML
18 сообщений из 18, страница 1 из 1
Class from XML
    #38606913
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как можна создать класс динамически из Xml, с полями и т. д., то есть что бы с ним можна было работать как с обычным обьектом.

У меня приходит много файлов разных форматов и я не хочу каждый раз когда появится новый тип файла писать еще один класс для его обработки, и вот подумал может можна создать список xml шаблонов классов и написать форму для их редактирования, а потом динамически из них строить классы.

На форуме StackOverFlow нашел код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public static T DeserializeObject<T>(string filePath)
   {
       XmlDocument doc = new XmlDocument();
       doc.Load(filePath);
       XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement);
       XmlSerializer ser = new XmlSerializer(typeof(T));
       object obj = ser.Deserialize(reader);

       return (T)obj;
}



Но вот как работать с полями класса "T"?

Если есть другие примеры буду ооочень благодарен за помощь.

Спасибо.
...
Рейтинг: 0 / 0
Class from XML
    #38606931
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708Но вот как работать с полями класса "T"?

1. приведение типа
2. рефлексия

"каждый раз когда появится новый тип файла писать еще один класс для его обработки" - самый нормальный подход
...
Рейтинг: 0 / 0
Class from XML
    #38606935
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3.dynamic
...
Рейтинг: 0 / 0
Class from XML
    #38606940
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmawVIT2708Но вот как работать с полями класса "T"?

1. приведение типа
2. рефлексия

"каждый раз когда появится новый тип файла писать еще один класс для его обработки" - самый нормальный подход

Я знаю но это надоедает. И поставщики не хотят соблюдать единый формат.
...
Рейтинг: 0 / 0
Class from XML
    #38606944
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил3.dynamic

Можете привести пример или ссылку (если есть под рукой) так как я никогда не пользовался этим.
...
Рейтинг: 0 / 0
Class from XML
    #38606945
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot kmaw]VIT2708Но вот как работать с полями класса "T"?

1. приведение типа
2. рефлексия

1. приведение типа к какому типу приводить, ели я создам класс из xml
...
Рейтинг: 0 / 0
Class from XML
    #38606961
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708потом динамически из них строить классы
А у вас есть алгоритм динамической генерации? Если есть, то можно Т4 юзать
...
Рейтинг: 0 / 0
Class from XML
    #38606966
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79VIT2708потом динамически из них строить классы
А у вас есть алгоритм динамической генерации? Если есть, то можно Т4 юзать

Алгоритмов нет, я вообще впервые с таким столкнулся, и вот пытаюсь разобраться.
...
Рейтинг: 0 / 0
Class from XML
    #38606970
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

в общем случае задача нерешаемая. Я не представляю себе, как можно загрузить в программу файл неизвестной структуры и получить подходящее для бизнес-задач описание класса.

есть лучший вариант, исходя из ваших хотелок - возьмите или напишите сами xsd-схему ваших xml-файлов, и по схеме (через xsd.exe к примеру) вы получите нагенерированные классы

Пример: 15042035
...
Рейтинг: 0 / 0
Class from XML
    #38606991
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Это xml файлы только с разным набором нодов, вот я и хочу создать шаблон xml для их обработки

То есть идея такая:
1. Создать xml шаблон (из него в программе создавать необходимый класс)
2. Создать к этому xml шаблону дополнительный xml_sql где будут хранится параметры для сохранения в базу (для этого я напишу редактор - эту задачу я знаю как решить)

xml_template -> Class (xml_sql -> Class) -> sql database.

Вот хотел так это разрешить, если это правильно.
...
Рейтинг: 0 / 0
Class from XML
    #38606993
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

xsd-схему - Спасибо за подсказку, попробую
...
Рейтинг: 0 / 0
Class from XML
    #38607157
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708kmawпропущено...


1. приведение типа
2. рефлексия

"каждый раз когда появится новый тип файла писать еще один класс для его обработки" - самый нормальный подход

Я знаю но это надоедает. И поставщики не хотят соблюдать единый формат.Но количество поставщиков и форматов конечно.

Спроектируйте свой формат, свою модель и набор преобразователей (конверторов, мапперов) из формата поставщиков в единый Ваш .

Книжка в помощь .
...
Рейтинг: 0 / 0
Class from XML
    #38607204
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708У меня приходит много файлов разных форматов и я не хочу каждый раз когда появится новый тип файла писать еще один класс для его обработки, и вот подумал может можна создать список xml шаблонов классов и написать форму для их редактирования, а потом динамически из них строить классы.Может, пойти по пути преобразования кучи разношерстных XML в единый формат и последующей работы именно с этим одним форматом? Для этого даже целый XSLT придумали.
...
Рейтинг: 0 / 0
Class from XML
    #38607337
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучМожет, пойти по пути преобразования кучи разношерстных XML в единый формат и последующей работы именно с этим одним форматом? Для этого даже целый XSLT придумали.
Вместо кучи разношерстного C#-кода будет куча разношерстных xsl-темплейтов. Плюс, если xml достаточно объемны, доп. тормоза на выполнение трансформации.
...
Рейтинг: 0 / 0
Class from XML
    #38607358
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,
Да ничего тут не сделать, если нет общего контракта ( о коем вы промолчали)
как вариант ( при наличие его) xml to dictionary а со словарем работать через декоратор или цепочку декораторов, как вариант через прокси.................................
...
Рейтинг: 0 / 0
Class from XML
    #38607550
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиVIT2708,
Да ничего тут не сделать, если нет общего контракта ( о коем вы промолчали)
как вариант ( при наличие его) xml to dictionary а со словарем работать через декоратор или цепочку декораторов, как вариант через прокси.................................

Спасибо, осталось к dictionary прикрутить sql параметры для загрузки на сервер
...
Рейтинг: 0 / 0
Class from XML
    #38607644
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныВместо кучи разношерстного C#-кода будет куча разношерстных xsl-темплейтов. Плюс, если xml достаточно объемны, доп. тормоза на выполнение трансформации.
Полностью согласен с этими словами. Я вообще никогда не понимал, зачем во многие проекты вводят прослойку XML.
Если есть данные и их нужно преобразовать - берём и преобразуем. Всё! Зачем их сначала перегонять в xml, а затем их xml в нужный вид?

skyANAНо количество поставщиков и форматов конечно.

Спроектируйте свой формат, свою модель
Именно! И заставить клиентов придерживаться этого единого формата. Не согласны - наказывать деньгами или ещё как.

Где-то в степиVIT2708,
Да ничего тут не сделать, если нет общего контракта ( о коем вы промолчали)
как вариант ... to dictionary
Ну а если нет возможности заставить клиентов перейти к одному формату, то у меня тоже возникла похожая мысль использовать некий словарь.
...
Рейтинг: 0 / 0
Class from XML
    #38607657
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,авторто у меня тоже возникла похожая мысль использовать некий словарь.
словарь это просто хранилище данных,( мне он больше нравится ) может быть и хмлрайдер в чистом виде.
вся фишка - что существует такой ящик назовем его декоратор ну или прокси, в который ложим данные, а у этого ящика
реализованы основные механизмы манипуляцией данными (через базовый абстрактный), и таких ящиков может быть много для разных тем( нужд)
они как матрешка могут один в другой засовываться и подбираться необходимый функционал для работы.
ничего нового, все до неприличия обыденно....
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Class from XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]