這里用到了Newtonsoft.Json,下載地址:http://json.codeplex.com/
1.根據不同的Model轉為對應的List
1 public static List<Model> ToList<Model>(this DataTable dt) where Model: class,new() 2 { 3 4 //創建一個屬性的列表 5 List<PropertyInfo> prlist = new List<PropertyInfo>(); 6 //獲取Model的類型實例 反射的入口 7 Type t = typeof(Model); 8 //獲得Model的所有的Public 屬性 並找出Model屬性和DataTable的列名稱相同的屬性(PropertyInfo) 並加入到屬性列表 9 Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); }); 10 //創建返回的集合 11 List<Model> oblist = new List<Model>(); 12 foreach (DataRow row in dt.Rows) 13 { 14 //創建Model的實例 15 var Modelob = new Model(); 16 //找到對應的數據,並賦值 17 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(Modelob, row[p.Name], null); }); 18 //放入到返回的集合中. 19 oblist.Add(Modelob); 20 } 21 return oblist; 22 }
2.直接轉為List<Hashtable>
把一些沒有特定列的DataTable轉為List<Hashtable>,一來方便使用到List<T>的功能,進行相關操作。二來,可以直接用MVC提供的Json()轉為JsonResult。
public List<Hashtable> GetList(DataTable dt) { List<Hashtable> mList = new List<Hashtable>(); int count = dt.Rows.Count; if (count > 0) { for (int i = 0; i <= count-1; i++) { Hashtable ht = new Hashtable(); foreach (DataColumn col in dt.Columns) { ht.Add(col.ColumnName, dt.Rows[i][col.ColumnName]); } mList.Add(ht); } } return mList; }
3.DataTable轉Json
//方法一:先轉List,在轉Json,可以附帶上分頁 public string DtToJson( DataTable dt , int page, int rows) { string json = string.Empty; IList<Hashtable> mList = new List<Hashtable>(); int count = dt.Rows.Count; int pageCount = (page + rows) > count ? count : (page + rows); if (pageCount > 0) { for (int i = page; i <= pageCount - 1; i++) { Hashtable ht = new Hashtable(); foreach (DataColumn col in dt.Columns) { ht.Add(col.ColumnName, dt.Rows[i][col.ColumnName]); } mList.Add(ht); } json = JsonConvert.SerializeObject(new {total=count,rows= mList }); } return json; }
//方法二:非常簡單,直接datatable轉Json,但需要比較新版本的Newtonsoft.Json.dll using Newtonsoft.Json; using Newtonsoft.Json.Converters; public string DtToJson(DataTable dt) { result=JsonConvert.SerializeObject(dt, new DataTableConverter()); return result; }
//方法三:轉為List用mvc提供的Json轉為Jsonresult public ActionResult Select(int page, int rows) { var UserList=GetList(SelectUserTable()); var List = UserList.Skip((page - 1) * rows).Take(rows); int length = UserList.Count(); var result = Json(new { total = length.ToString(), rows = List }); result.ContentType = "text/html"; return result; }