我有一张带细胞的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()
的所有列都是常量。
如何动态更改常用的键值?
答案 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())