【转载】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技术小趣屋。