簡單的Datatable轉List,Json


這里用到了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;
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM