在C#中动态填充对象

时间:2016-12-06 06:18:47

标签: c# .net excel c#-4.0

我有一张带细胞的excel表。我想在运行时读取并填充对象。 这就是我的尝试。

dynamic Common = new JObject();

foreach (DataRow dsRow in dtTable.Rows)
{
    // On all tables' columns
    foreach(DataColumn dc in dtTable.Columns)
    {

    var columnName = dc.ColumnName;
        Common.columnName = dsRow[dc].ToString();
    }
}

但问题是dtoCommonTag.columnNamedsRow[dc].ToString()的所有列都是常量。

如何动态更改常用值?

3 个答案:

答案 0 :(得分:1)

这里有两个选项:

你试过吗

Common[columnName] = dsRow[dc].ToString();

最糟糕的情况是,您可以编写一个switch语句来影响每一列。它不会很漂亮,但它会起作用。

答案 1 :(得分:1)

这不是dynamic对象的工作方式。您可以动态地向动态对象添加属性,但不能“按字符串”。

但是,您可以使用ExpandoObject来执行此操作:

var x = new ExpandoObject() as IDictionary<string, Object>;
x.Add(columnName, dsRow[dc].ToString());

dynamic dyn = x;

然后您可以使用列名作为属性。

答案 2 :(得分:0)

使用&#34;反思&#34;。 然后,您可以将属性名称作为字符串值传递,然后将值传递给该属性。 Try this

FieldInfo info = typeof(Common).GetField(dc.ColumnName);
info.SetValue(null, dsRow[dc].ToString())