DataTable IList 與 Json 互轉

DataTable IList 與 Json 互轉

 #region Json轉DataTable
        public static DataTable Json2Dtb(string json)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            ArrayList dic = jss.Deserialize<ArrayList>(json);
            DataTable dtb = new DataTable();
            if (dic.Count > 0)
            {
                foreach (Dictionary<string, object> drow in dic)
                {
                    if (dtb.Columns.Count == 0)
                    {
                        foreach (string key in drow.Keys)
                        {
                            dtb.Columns.Add(key, drow[key].GetType());
                        }
                    }
                    DataRow row = dtb.NewRow();
                    foreach (string key in drow.Keys)
                    {
                        row[key] = drow[key];
                    }
                    dtb.Rows.Add(row);
                }
            }
            return dtb;
        }
        #endregion

 

#region DataTable轉Json
        public static string Dtb2Json(DataTable dtb)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            ArrayList dic = new ArrayList();
            foreach (DataRow row in dtb.Rows)
            {
                Dictionary<string, object> drow = new Dictionary<string, object>();
                foreach (DataColumn col in dtb.Columns)
                {
                    drow.Add(col.ColumnName, row[col.ColumnName]);
                }
                dic.Add(drow);
            }
            return jss.Serialize(dic);
        }
        #endregion

 

#region 對象轉Json
        /// <summary>
        /// 對象轉Json
        /// </summary>
        /// <param name="IL">實體類列表</param>
        /// <param name="path">程序集,命名空間</param>
        /// <param name="className">類名</param>
        /// <returns></returns>
        public static string Ilist2Json(IList<object> IL,string path,string className)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            ArrayList dic = new ArrayList();
           
            if (IL.Count > 0)
            {
                for (int i = 0; i < IL.Count; i++)
                {
                    Dictionary<string, object> drow = new Dictionary<string, object>();
                    //Model bj = Activator.CreateInstance<Model>();
                    Type type = Assembly.Load(path).CreateInstance(className).GetType();//bj.GetType();
                    PropertyInfo[] pis = type.GetProperties();
                    for (int j = 0; j < pis.Length; j++)
                    {
                        drow.Add(pis[j].Name.ToString(), pis[j].GetValue(IL[i], null));
                    }
                    dic.Add(drow);
                }               
            }
            return jss.Serialize(dic);
        }
        #endregion

 

#region Json轉實體類
        public static IList<object> Json2Model(string json,string path,string className)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            ArrayList dic = jss.Deserialize<ArrayList>(json);
            IList<object> iL = new List<object>();
            if (dic.Count > 0)
            {
                foreach (Dictionary<string, object> drow in dic)
                {
                    object model = new object();
                    model = Assembly.Load(path).CreateInstance(className);
                    Type type = model.GetType();//bj.GetType();
                    PropertyInfo[] pis = type.GetProperties();
                    for (int j = 0; j < pis.Length; j++)
                    {
                        object val;
                        string strType = pis[j].PropertyType.ToString();
                        switch (strType)//根據類型設置屬性值
                        {
                            case "System.String":
                                val=drow[pis[j].Name].ToString();
                                break;
                            case "System.Int32":
                                val = Int32.Parse(drow[pis[j].Name].ToString());
                                break;
                            default:
                                val=drow[pis[j].Name].ToString();
                                break;

                        }
                        pis[j].SetValue(model, val);                       
                    }

                    iL.Add(model);
                }
            }
            return iL;
        }
        #endregion

 

 

[WebMethod]
        public static string geDataTableByAjax3(string str)
        {
            IList<object> iL = new List<object>();
            for (int i = 0; i < 5; i++)
            {
                Model model = new Model();
                model.ID = i.ToString();
                model.Name = "JSON" + i.ToString();
                model.Address = "中國-北京-海淀" + i.ToString() + "號";
                iL.Add(model);
            }
            

            string path = "WebApplication1";
            string className = path + ".Model";

            string strss = Ilist2Json(iL,path,className).ToString();

            Json2Model(strss, path, className);//將json轉實體類列表

            return strss.ToString();

 

        }

 

//下面方案二是用Newtonsoft.Json更簡單

        /// <summary>
        /// DataTable轉換爲json字符串
        /// </summary>
        /// <param name="dtb">DataTable</param>
        /// <returns></returns>
        public static string DataTableToJson2(DataTable dtb)
        {
            try
            {
                string strss = JsonConvert.SerializeObject(dtb);
                DataTable dt = JsonConvert.DeserializeObject<DataTable>(strss);
                return strss;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 對象轉Json
        /// </summary>
        /// <param name="IL">實體類列表</param>
        /// <returns></returns>
        public static string ListModelToJson<T>(IList<T> IL)//使用泛型
        {
            try
            {
                string strss = JsonConvert.SerializeObject(IL);
                return strss;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Json轉DataTable
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static DataTable JsonToDataTable2(string json)
        {
            try
            {
                DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// json轉實體類列表
        /// </summary>
        /// <param name="json">前臺json字符串</param>
        /// <param name="path">程序集,命名空間</param>
        /// <param name="className">類名</param>
        /// <returns></returns>
        public static IList<T> JsonToListModel<T>(string json)//使用泛型傳遞實際的實體類,返回實體類列表
        {
            try
            {
                IList<T> iL = JsonConvert.DeserializeObject<IList<T>>(json);
                return iL;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章