在C#中将XML字符串转换为代码

时间:2010-06-29 13:18:46

标签: c# xml dynamic-languages

我在ASP.NET webforms应用程序(C#)中有一个报告模块,它使用动态控件来处理每个报告的参数。

这些动态控件是从SQL Server 2008 DB中的XML列构建的。

XML结构:

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

为了便于阅读,我遗漏了很多元素。

如果<Control>元素不为空(如XML示例中的Start Date参数的情况),则基于C#的XSLT转换会在我的表单上创建适当的控件。

如果<Control>元素为空(如CustomerId的情况),那么我想使用具有相同名称的现有c#属性(即我在我的c#代码中定义了CustomerId)。

然后将这些参数值(CustomerId和Start Date)传递给用于生成报告数据的存储过程。

我在我的C#代码中使用XPathNavigator和相关类来抽取任何空<Name>元素的<Control>元素。

问题是<Name>元素是字符串的形式,我真的希望它是C#代码形式(抱歉想不出更好的方式来描述它!)即我想要this.CustomerId(添加了这个以显示它的代码而不是字符串)而不是“CustomerId”。

由于我不知道这个系统会随着时间推移有多少报告,所以我真的不想建立一个enum或switch语句,如果“CustomerId”那么.CustomerId等因为它似乎否定了动态代码。

我意识到可能需要反思,而我对此知之甚少,因此欢迎任何有关此问题的不同方法的建议或建议。

谢谢,

3 个答案:

答案 0 :(得分:0)

您想根据xml内容动态生成一个类及其属性吗? 你想要它而不必生成代码并重新编译我也很确定。 我曾经尝试过这一次,但我从未设法让它发挥作用。

我没有看到任何解决方案,抱歉。

答案 1 :(得分:0)

您正在寻找的是代码生成器。虽然我自己没有实现过,但我之前使用过其他人创建的模板,它就像魅力一样。您可以开始使用here

答案 2 :(得分:0)

这应该这样做:

this.GetType().GetProperty("CustomerId").SetValue("YourValue");