zoukankan      html  css  js  c++  java
  • 【转载】C#工具类:Json操作帮助类

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

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

        /// <summary>
        /// JSON帮助类
        /// </summary>
        public class JsonHelper
        {
            /// <summary> 
            /// 对象转JSON 
            /// </summary> 
            /// <param name="obj">对象</param> 
            /// <returns>JSON格式的字符串</returns> 
            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);
                }
            }
            /// <summary> 
            /// 数据表转键值对集合
            /// 把DataTable转成 List集合, 存每一行 
            /// 集合中放的是键值对字典,存每一列 
            /// </summary> 
            /// <param name="dt">数据表</param> 
            /// <returns>哈希表数组</returns> 
            public static List<Dictionary<string, object>> DataTableToList(DataTable dt)
            {
                List<Dictionary<string, object>> list
                     = new List<Dictionary<string, object>>();
                foreach (DataRow dr in dt.Rows)
                {
                    Dictionary<string, object> dic = new Dictionary<string, object>();
                    foreach (DataColumn dc in dt.Columns)
                    {
                        dic.Add(dc.ColumnName, dr[dc.ColumnName]);
                    }
                    list.Add(dic);
                }
                return list;
            }
            /// <summary> 
            /// 数据集转键值对数组字典 
            /// </summary> 
            /// <param name="dataSet">数据集</param> 
            /// <returns>键值对数组字典</returns> 
            public static Dictionary<string, List<Dictionary<string, object>>> DataSetToDic(DataSet ds)
            {
                Dictionary<string, List<Dictionary<string, object>>> result = new Dictionary<string, List<Dictionary<string, object>>>();
                foreach (DataTable dt in ds.Tables)
                    result.Add(dt.TableName, DataTableToList(dt));
                return result;
            }
            /// <summary> 
            /// 数据表转JSON 
            /// </summary> 
            /// <param name="dataTable">数据表</param> 
            /// <returns>JSON字符串</returns> 
            public static string DataTableToJSON(DataTable dt)
            {
                return ObjectToJSON(DataTableToList(dt));
            }
            /// <summary> 
            /// JSON文本转对象,泛型方法 
            /// </summary> 
            /// <typeparam name="T">类型</typeparam> 
            /// <param name="jsonText">JSON文本</param> 
            /// <returns>指定类型的对象</returns> 
            public static T JSONToObject<T>(string jsonText)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                try
                {
                    return jss.Deserialize<T>(jsonText);
                }
                catch (Exception ex)
                {
                    throw new Exception("JSONHelper.JSONToObject(): " + ex.Message);
                }
            }
            /// <summary> 
            /// 将JSON文本转换为数据表数据 
            /// </summary> 
            /// <param name="jsonText">JSON文本</param> 
            /// <returns>数据表字典</returns> 
            public static Dictionary<string, List<Dictionary<string, object>>> TablesDataFromJSON(string jsonText)
            {
                return JSONToObject<Dictionary<string, List<Dictionary<string, object>>>>(jsonText);
            }
            /// <summary> 
            /// 将JSON文本转换成数据行 
            /// </summary> 
            /// <param name="jsonText">JSON文本</param> 
            /// <returns>数据行的字典</returns>
            public static Dictionary<string, object> DataRowFromJSON(string jsonText)
            {
                return JSONToObject<Dictionary<string, object>>(jsonText);
            }
            /// <summary>
            /// 将json转换为DataTable
            /// </summary>
            /// <param name="strJson">得到的json</param>
            /// <returns></returns>
            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;
            }
        }

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

    博主个人技术交流群:960640092,博主微信公众号如下:

  • 相关阅读:
    [SoapUI] Compare JSON Response(比较jsonobject)
    [SoapUI] Command-Line Arguments
    [SoapUI] How to create a random UUID in each Request's Headers
    SoapUI Script Library
    [正则表达式] 正则表达式匹配UUID
    [远程] windows 2008 server设置了共享文件夹,并且共享给了everyone,但是还是无法访问,怎么解决呢?
    each
    WSDL Style和use的组合方式说明
    XML xsd
    java.lang.ClassNotFoundException: springosgi
  • 原文地址:https://www.cnblogs.com/xu-yi/p/10577581.html
Copyright © 2011-2022 走看看