C#工具类:Json操作帮助类(转载)

原文转载自C#工具类:Json操作帮助类_IT技术小趣屋。

Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON、数据表转键值对集合、数据集转键值对数组字典 、数据表转JSON、JSON文本转对象(泛型方法)、将JSON文本转换为数据表数据、将JSON文本转换成数据行、将json转换为DataTable等。

封装后的工具帮助类如下:

复制代码
    /// 
    /// JSON帮助类
    /// 
    public class JsonHelper
    {
        ///  
        /// 对象转JSON 
        ///  
        /// 对象 
        /// JSON格式的字符串 
        public static string ObjectToJSON(object obj)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                byte[] b = Encoding.UTF8.GetBytes(jss.Serialize(obj));
                return Encoding.UTF8.GetString(b);
            }
            catch (Exception ex)
            {
                throw new Exception("JSONHelper.ObjectToJSON(): " + ex.Message);
            }
        }
        ///  
        /// 数据表转键值对集合
        /// 把DataTable转成 List集合, 存每一行 
        /// 集合中放的是键值对字典,存每一列 
        ///  
        /// 数据表 
        /// 哈希表数组 
        public static List> DataTableToList(DataTable dt)
        {
            List> list
                 = new List>();
            foreach (DataRow dr in dt.Rows)
            {
                Dictionary dic = new Dictionary();
                foreach (DataColumn dc in dt.Columns)
                {
                    dic.Add(dc.ColumnName, dr[dc.ColumnName]);
                }
                list.Add(dic);
            }
            return list;
        }
        ///  
        /// 数据集转键值对数组字典 
        ///  
        /// 数据集 
        /// 键值对数组字典 
        public static Dictionary>> DataSetToDic(DataSet ds)
        {
            Dictionary>> result = new Dictionary>>();
            foreach (DataTable dt in ds.Tables)
                result.Add(dt.TableName, DataTableToList(dt));
            return result;
        }
        ///  
        /// 数据表转JSON 
        ///  
        /// 数据表 
        /// JSON字符串 
        public static string DataTableToJSON(DataTable dt)
        {
            return ObjectToJSON(DataTableToList(dt));
        }
        ///  
        /// JSON文本转对象,泛型方法 
        ///  
        /// 类型 
        /// JSON文本 
        /// 指定类型的对象 
        public static T JSONToObject(string jsonText)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                return jss.Deserialize(jsonText);
            }
            catch (Exception ex)
            {
                throw new Exception("JSONHelper.JSONToObject(): " + ex.Message);
            }
        }
        ///  
        /// 将JSON文本转换为数据表数据 
        ///  
        /// JSON文本 
        /// 数据表字典 
        public static Dictionary>> TablesDataFromJSON(string jsonText)
        {
            return JSONToObject>>>(jsonText);
        }
        ///  
        /// 将JSON文本转换成数据行 
        ///  
        /// JSON文本 
        /// 数据行的字典
        public static Dictionary DataRowFromJSON(string jsonText)
        {
            return JSONToObject>(jsonText);
        }
        /// 
        /// 将json转换为DataTable
        /// 
        /// 得到的json
        /// 
        public static DataTable JsonToDataTable(string strJson)
        {
            //转换json格式
            strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();
            //取出表名   
            var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
            string strName = rg.Match(strJson).Value;
            DataTable tb = null;
            //去除表名   
            strJson = strJson.Substring(strJson.IndexOf("[") + 1);
            strJson = strJson.Substring(0, strJson.IndexOf("]"));
            //获取数据   
            rg = new Regex(@"(?<={)[^}]+(?=})");
            MatchCollection mc = rg.Matches(strJson);
            for (int i = 0; i < mc.Count; i++)
            {
                string strRow = mc[i].Value;
                string[] strRows = strRow.Split('*');
                //创建表   
                if (tb == null)
                {
                    tb = new DataTable();
                    tb.TableName = strName;
                    foreach (string str in strRows)
                    {
                        var dc = new DataColumn();
                        string[] strCell = str.Split('#');
                        if (strCell[0].Substring(0, 1) == "\"")
                        {
                            int a = strCell[0].Length;
                            dc.ColumnName = strCell[0].Substring(1, a - 2);
                        }
                        else
                        {
                            dc.ColumnName = strCell[0];
                        }
                        tb.Columns.Add(dc);
                    }
                    tb.AcceptChanges();
                }
                //增加内容   
                DataRow dr = tb.NewRow();
                for (int r = 0; r < strRows.Length; r++)
                {
                    dr[r] = strRows[r].Split('#')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
                }
                tb.Rows.Add(dr);
                tb.AcceptChanges();
            }
            return tb;
        }
    }

转载于:https://www.cnblogs.com/qinmoran123/p/10592711.html

你可能感兴趣的:(C#工具类:Json操作帮助类(转载))