欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【转载】C#工具类:Json操作帮助类

程序员文章站 2022-07-11 09:06:52
Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON、数据表转键值对集合、数据集转键值对数组字典 、数据表转JSON、JSON文本转对象(泛型方法)、将JSO ......

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技术小趣屋