【问题标题】:c# create dynamic Class / Properties at runtime in WCFc# 在 WCF 运行时创建动态类/属性
【发布时间】:2012-10-04 19:42:31
【问题描述】:

这些是我需要写的方法:

List<Test> test = new List<Test>();
public List<Test> GetData(int ReportId)
     {
       StringBuilder qr = new StringBuilder();
       StringBuilder SQL = new StringBuilder();
       DataTable dt;

    qr.AppendLine(" select SQL");
    qr.AppendLine(" from  V_REPORT_SQL f");
    qr.AppendLine(String.Format(" where REPORT_ID = '{0}'", ReportId));

   dt = DataManager.GetDatadt(qr);
      foreach (DataRow dr in dt.Rows)
         {
           SQL.Append(dr[0].DBStr());
         }

        dt = DataManager.GetData(SQL);
        foreach (DataRow dr in dt.Rows)
         {
        Test t = new Test()
        {
         can i dynamically create and iterate over the properties and assign the datarow? 
        };

        test.Add(t);
    }
    return test;

    }

//这是DataContract

 [DataContract]
    public class Test
    {  
    }

表 V_Report_SQL

reportid | SQL
1        | select id,Name from table1
2        | select acctid,Name,date from table2
3        | select Name,location,date,XX,XX,XX from table3

我要解决的问题是我发送reportid 以动态获取sql,然后传递sql 并获取DataTable 中的数据。现在我需要将其发送为list&lt;Test&gt;。我可以为类 Test 动态创建属性吗? 例如:

     for report id 1

     [DataMember]
     public int Id { get; set; }

     [DataMember]
     public string Name { get; set; }

     for report id 2 

     [DataMember]
     public int acctid { get; set; }

     [DataMember]
     public string Name { get; set; }

     [DataMember]
     public DateTime date { get; set; }

使用该服务的客户端应用程序是在 silverlight 4 上构建的。

如果我不清楚,请告诉我,我可以更新它。我不确定我选择解决的路线。有没有其他方法可以解决这个问题。

更新:

我已经更新了,我不再使用动态,不知道这条路线会解决。

【问题讨论】:

    标签: c# wcf silverlight list reflection


    【解决方案1】:

    一般来说,尝试在 Web 服务中使用特定于平台的类型是个坏主意。例如,您不会期望 Java 能够理解 DataTable 类型。

    我怀疑您在尝试返回 dynamic 对象时会遇到同样的问题。这甚至不能用服务的 WSDL 来描述,所以我怀疑任何调用者都知道如何处理这样的返回值。

    事实上,我什至不知道服务如何序列化这样的事情。

    【讨论】:

    • 有没有其他方法可以在不使用动态的情况下解决问题
    • 我看不出您的架构是动态的。你的 SQL 不是总是返回相同类型的相同列吗?
    • 不,它可能有任意数量的不同数据类型的列。
    【解决方案2】:

    我认为你的意图是崇高的,但实际上你会创建一个不断变化的网络服务。谁会使用它?如果我是你,我会返回以下对象之一:

    1. 2D 字符串表(第一行是一系列标题和 其余的将分别存储值)
    2. 一维字符串表(属性名-属性值对)
    3. 字符串(CSV 文件的平面内容)
    4. 二进制 CSV
    5. 必须在客户端抓取的动态 XML

    假设您只关心文本值显然可能是错误的,但由于您使用的是报告表,我认为这种情况很有可能发生。

    希望这会有所帮助, 彼得

    【讨论】:

    • 我正在考虑通过动态 xml 发送。
    • 如果您打算继续这个想法,还请考虑为您的动态 XML 公开 XSD 文档,或者只为您返回的所有 XML 公开一个通用文档。
    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2020-01-08
    相关资源
    最近更新 更多