在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())