2016-12-06 103 views
0

我有一个Excel单元格。我想在运行时读取和填充一个对象。 这是我试过的。动态填充C中的对象#

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.columnName是从dsRow[dc].ToString()所有列不变。

如何动态更改的值常见的

回答

1

两个选项:

你试过

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

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

+0

第二种选择是什么? –

+0

@ThorstenDittmar答案就在这里:“写一个switch语句来影响每一列”。 – hvd

0

使用“反射”。 然后,您可以将属性名称作为字符串值传递,然后将值传递给该属性。 Try this

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

也就是说dynamic对象不是如何工作的。您可以动态地将属性添加到动态对象,但不能“按字符串”。

你可以,但是,使用的ExpandoObject做到这一点:

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

dynamic dyn = x; 

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