c# 利用反射动态给实体类对象赋值
/// <summary> /// 将datatable装入指定类型的集合 /// </summary> /// <typeparam name="T"></typeparam> public class GenericList<T>:List<T> { public GenericList(DataTable dt, string f) { System.Type tt = System.Type.GetType(f);//获取指定名称的类型 object ff = Activator.CreateInstance(tt, null);//创建指定类型实例 PropertyInfo[] fields = ff.GetType().GetProperties();//获取指定对象的所有公共属性 foreach (DataRow dr in dt.Rows) { object obj = Activator.CreateInstance(tt, null); foreach (DataColumn dc in dt.Columns) { foreach (PropertyInfo t in fields) { if (dc.ColumnName == t.Name) { t.SetValue(obj, dr[dc.ColumnName], null);//给对象赋值 continue; } } } this.Add((T)obj);//将对象填充到list集合 } } }
例子:
//////////////////////实体类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel; using System.ComponentModel.DataAnnotations; namespace MvcApplication2.Models { [MetadataType(typeof(EmployeeData))] public partial class Employee { public class EmployeeData { [DisplayName("用户ID")] public int ID { set; get; } [DisplayName("姓名")] [Required(ErrorMessage = "用户名不允许为空")] [StringLength(50, ErrorMessage = "用户名长度必须小于50个字符")] public string Uname { set; get; } [DisplayName("性别")] public bool Sex { set; get; } [DisplayName("出生日期")] [Required(ErrorMessage = "出生日期不允许为空")] public DateTime Birthday { set; get; } [DisplayName("是否婚配")] public bool IsHp { set; get; } } } } //////////////////调用 GenericList<Employee> list1 = new GenericList<Employee>(dt, "MvcApplication2.Models.Employee");//调用 return View(list1);