Создание / компиляция класса данных .net в приложении - PullRequest
3 голосов
/ 19 марта 2010

Есть ли шаблон, структура XML, техника архитектуры, которую мы можем использовать для создания простого кода класса держателя данных, который мы можем десериализовать в / из и делать это во время выполнения?

Мы находимся на ранней стадии разработки проекта .Net, и одна из наших целей состоит в том, чтобы сделать получившуюся систему расширяемой за счет конфигурации без необходимости разработчика. Нам необходимо поддерживать новые источники данных, обычно доставляемые в виде сообщений XML. В настоящее время мы конвертируем / десериализуем сообщения в простые классы, а затем используем уже существующий язык, который может манипулировать этими классами по мере необходимости.

Это хорошо работает, когда у вас есть разработчик, который сопоставляет Xml с простым классом, создает класс, а затем записывает десериализацию, но он не расширяем для администратора. Наша целевая аудитория - это администратор высшего класса и / или администратор сети - люди, которые могут работать с Xml, но могут не знать C #.

Ответы [ 2 ]

3 голосов
/ 19 марта 2010

Вам не нужно писать какие-либо классы или процедуры десериализации. Если у вас есть схема, вы можете использовать инструмент XSD.exe из Visual Studio для автоматического создания классов и использовать встроенную сериализацию / десериализацию .NET XML.

Теперь, как это происходит без перекомпиляции каждый раз ...

Это не идеально, но это должно работать:

Предположим, ваш администратор баз данных может написать схему для XML. Вы могли бы написать инструмент, который берет схему, запускает ее через XSD, добавляет некоторый код-обертку поверх нее и создает dll, который можно использовать из вашего приложения.

Это может быть ручной процесс (т. Е. Администраторы отправляют вам по электронной почте схему) или вы можете распространять инструмент как часть вашего приложения.

Кроме того, вы можете вывести схему из существующего XML-документа.

1 голос
/ 19 марта 2010

Возможно DataTable? Или просто использовать XML DOM (XmlDocument или XDocument) в качестве хранилища данных? Конечно, ни один из них не идеален - но нет смысла создавать тип во время выполнения , просто для этого, если ваш настоящий код когда-нибудь его увидит. Какой цели будет служить дополнительный тип класса? Среди других вопросов вам придется использовать много размышлений, просто чтобы поговорить с ним.

Другим вариантом является пользовательский пакет свойств и IXmlSerializable, но это усилие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...