在C#中dynamic填充对象

我有一个单元格的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.columnName对于dsRow[dc].ToString()所有列是不变的。

我如何dynamic改变Common关键值?

这里有两个选项:

你有没有尝试过

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

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

这不是dynamic对象的工作方式。 您可以dynamic地将属性添加到dynamic对象,但不能“按string”。

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

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

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

使用“reflection”。 然后,您可以将属性名称作为string值传递,然后将值传递给该属性。 尝试这个

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