Преобразование строки XML в код в C # - PullRequest
2 голосов
/ 29 июня 2010

У меня есть модуль отчетности в приложении веб-форм ASP.NET (C #), который использует динамические элементы управления для параметров для каждого отчета.

Эти динамические элементы управления построены из столбца XML в БД SQL Server 2008.

Структура XML:

<Report Parameters>
    <Parameter>
        <Name>CustomerId</Name>
        <Control />
    </Parameter>
     <Parameter>
        <Name>Start Date</Name>
        <Control>DDL</Control>
    </Parameter>
</Report Parameters>

Я упустил много элементов для удобства чтения.

Если элемент <Control> не пустой (как в случае параметра Начальная дата в примере XML), то преобразование XSLT на основе C # создает соответствующий элемент управления в моей форме.

Если элемент <Control> пуст (как в случае с CustomerId), тогда я хочу использовать существующее свойство c # с тем же именем (т.е. у меня есть CustomerId, определенный в моем коде c #).

Эти значения параметров (CustomerId и Start Date) затем передаются в хранимую процедуру, используемую для генерации данных отчета.

Я использую XPathNavigator и связанные с ним классы в своем коде C # для извлеченияЭлемент <Name> любого пустого элемента <Control>.

Проблема в том, что элемент <Name> находится в форме строки, и я действительно хочу, чтобы он был в форме кода C # (извините, не могу придумать лучшего способа описать это!) Т.е.хочу this.CustomerId (добавил this, чтобы показать, что это код, а не строка), а не "CustomerId".

Поскольку я не знаю, сколько отчетов будет иметь эта система с течением времени, я на самом деле не хочу создавать оператор enum или switch, если "CustomerId", затем this.CustomerId и т. Д., Как кажется, отрицаетточка динамического кода.

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

Спасибо,

Rich.

Ответы [ 3 ]

0 голосов
/ 29 июня 2010

То, что вы ищете, это генератор кода.Хотя я не реализовал один сам, я использовал шаблоны, созданные другими ранее, и это работает как шарм.Вы можете начать здесь .

0 голосов
/ 30 июня 2010

Это должно сделать это:

this.GetType().GetProperty("CustomerId").SetValue("YourValue");
0 голосов
/ 29 июня 2010

Вы хотите динамически генерировать класс и его свойства на основе содержимого xml? И вы хотите это без необходимости генерировать код и перекомпилировать, я тоже уверен. Я тоже пробовал это однажды, и мне так и не удалось заставить его работать.

Я не вижу решения, извините.

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