PropertyInfo.SetValue无法将字符串转换为Decimal

时间:2017-04-09 08:15:50

标签: c# asp.net .net asp.net-mvc

我有一个数据表,其中包含不同数据类型的列(主要是int64和string)。 我试图将此数据表转换为对象列表。 我正在使用这些方法,

public static List<T> ConvertDataTable<T>(DataTable dt)
{
 List<T> data = new List<T>();
 foreach (DataRow row in dt.Rows)
 {
  T item = GetItem<T>(row);
  data.Add(item);
 }
 return data;
}

以下GetItem()(pro.SetValue()更精确)方法在尝试转换Object of type 'System.String' cannot be converted to type 'System.Decimal' datacolumn值时会抛出异常(string。)到类型Decimal

的类属性
private static T GetItem<T>(DataRow dr)
{
 Type temp = typeof(T);
 T obj = Activator.CreateInstance<T>();
 foreach (DataColumn column in dr.Table.Columns)
 {
  foreach (PropertyInfo pro in temp.GetProperties())
  {
   if (pro.Name == column.ColumnName)
    pro.SetValue(obj, dr[column.ColumnName], null);
    else
     continue;
  }
 }
return obj;
}

这是MyClass 这只不过是

public class AgriSales
{
 public Int64 Id { get; set; }
 public string Type { get; set; }
 public Decimal Cost    { get; set; }
}

有人能指导我正确的方法来克服我所面临的障碍吗?

1 个答案:

答案 0 :(得分:1)

使用Convert.ChangeType()可以帮到你。但是,您可能需要为更复杂的类型实施相同的安全措施。

pro.SetValue(obj, Convert.ChangeType(dr[column.ColumnName], pro.PropertyType), null);