zoukankan      html  css  js  c++  java
  • 简单的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;
    }
  • 相关阅读:
    PHP无限极分类生成树方法
    如何用c#本地代码实现与Webbrowser中的JavaScript交互
    在sqlite中,如何删除字段? how to drop a column in sqlite
    如何在centos下配置redis开机自启动
    WinForm中的图表控件Chart
    XPath高级用法(冰山一角)
    windows下MySQL的安装(非安装包)
    WinFrom下Webbrowser加载自定义页面的技巧
    .net下使用最小堆实现TopN算法
    .net程序中http请求的超时配置
  • 原文地址:https://www.cnblogs.com/woostundy/p/3305589.html
Copyright © 2011-2022 走看看