C#共通のjson操作クラスを共有


json操作クラスは、json形式の文字列常用操作をサポートし、オブジェクトをjson文字列、json文字列にシーケンス化してオブジェクトに変換し、DataTableをjson文字列に変換する.エンティティークラスをDataTableに変換することをサポートします.
ソースコードは次のとおりです.using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Web.Script.Serialization; using System.Collections.Generic; using System.Text; using System.Collections; using System.Reflection; using System.IO; /// ///JsonTableHelper /// public static class JsonTableHelper { /// /// /// /// /// json public static string ToJson(this object obj) { JavaScriptSerializer serialize = new JavaScriptSerializer(); return serialize.Serialize(obj); } /// /// /// /// /// /// json public static string ToJson(this object obj, int recursionDepth) { JavaScriptSerializer serialize = new JavaScriptSerializer(); serialize.RecursionLimit = recursionDepth; return serialize.Serialize(obj); } /// /// DataTable json /// /// DataTable /// json public static string ToJson(DataTable dt) { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); DataRowCollection drc = dt.Rows; for (int i = 0; i < drc.Count; i++) { jsonString.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { string strKey = dt.Columns[j].ColumnName; string strValue = drc[i][j].ToString(); Type type = dt.Columns[j].DataType; jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (j < dt.Columns.Count - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } jsonString.Remove(jsonString.Length - 1, 1); jsonString.Append("]"); return jsonString.ToString(); } /// /// 、 、 /// /// /// /// private static string StringFormat(string str, Type type) { if (str== null || str == string.Empty) str = "\"\""; if (type == typeof(string)) { str = String2Json(str); str = "\"" + str + "\""; } else if (type == typeof(DateTime)) { str = "\"" + str + "\""; } else if (type == typeof(bool)) { str = str.ToLower(); } return str; } /// /// DataTable json, /// /// DataTable /// json public static string ToJsonTotal(DataTable dt,int count) { StringBuilder sb = new StringBuilder(); sb.Append("{\"total\":"+count+",\"rows\":"); sb.Append(ToJsonp(dt)); sb.Append("}"); return sb.ToString(); } /// /// /// /// /// private static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '/': sb.Append("\\/"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '
': sb.Append("\
"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; default: sb.Append(c); break; } } return sb.ToString(); } /// /// DataTable json /// /// DataTable /// json public static string ToJsonDrv(DataTable dt) { Dictionary dic = new Dictionary(); int index = 0; foreach (DataRowView drv in dt.DefaultView) { Dictionary result = new Dictionary(); foreach (DataColumn dc in dt.Columns) { result.Add(dc.ColumnName, drv[dc.ColumnName].ToString()); } dic.Add(index.ToString(), result); index++; } return ToJson(dic); } /// /// DataTable jsonp,autocomplete jsonp /// /// DataTable /// jsonp public static string ToJsonp(DataTable dtResult) { if (dtResult == null) { return ""; } StringBuilder jsonString = new StringBuilder(); string temp = ""; string value = ""; jsonString.Append("["); foreach (DataRow dr in dtResult.Rows) { temp = ""; jsonString.Append("{"); foreach (DataColumn dc in dtResult.Columns) { value = dr[dc].ToString(); //if (value.Length < 1) //{ // value = " "; //} temp += "\"" + dc.ColumnName + "\":\"" + value + "\","; } temp = temp.TrimEnd(','); jsonString.Append(temp + "},"); } temp = jsonString.ToString(); temp = temp.TrimEnd(','); temp += "]"; return temp; } /// /// DataTable /// /// /// /// public static DataTable ToDataTable(IList objlist) { if (objlist == null || objlist.Count <= 0) { return null; } DataTable dt = new DataTable(typeof(T).Name); DataColumn column; DataRow row; System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (T t in objlist) { if (t == null) { continue; } row = dt.NewRow(); for (int i = 0, j = myPropertyInfo.Length; i < j; i++) { System.Reflection.PropertyInfo pi = myPropertyInfo[i]; string name = pi.Name; if (dt.Columns[name] == null) { column = new DataColumn(name, pi.PropertyType); dt.Columns.Add(column); } row[name] = pi.GetValue(t, null); } dt.Rows.Add(row); } return dt; } public static string Obj2Base64String(object serializableObject) { string returnedData; if (serializableObject == null) returnedData = String.Empty; else { byte[] resultBytes = null; System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); MemoryStream stream = new MemoryStream(); formatter.Serialize(stream, serializableObject); resultBytes = stream.ToArray(); stream.Close(); returnedData = Convert.ToBase64String(resultBytes); } return returnedData; } ///
/// Deserializes base64 string to object. string object /// public static object Base64String2Obj(string deserializedString) { object returnedData; if (deserializedString == String.Empty) returnedData = null; else { System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); MemoryStream stream = new MemoryStream(); byte[] middata = Convert.FromBase64String(deserializedString); stream.Write(middata, 0, middata.Length); //Pay attention to the following line. don't forget this line. stream.Seek(0, SeekOrigin.Begin); returnedData = formatter.Deserialize(stream); stream.Close(); } return returnedData; } /// /// Json DataTable /// /// /// public static DataTable ToDataTable(this string json) { DataTable dataTable = new DataTable(); // DataTable result; try { JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); javaScriptSerializer.MaxJsonLength = Int32.MaxValue; // ArrayList arrayList = javaScriptSerializer.Deserialize(json); if (arrayList.Count > 0) { foreach (Dictionary dictionary in arrayList) { if (dictionary.Keys.Count() == 0) { result = dataTable; return result; } if (dataTable.Columns.Count == 0) { foreach (string current in dictionary.Keys) { dataTable.Columns.Add(current, dictionary[current].GetType()); } } DataRow dataRow = dataTable.NewRow(); foreach (string current in dictionary.Keys) { dataRow[current] = dictionary[current]; } dataTable.Rows.Add(dataRow); // DataTable } } } catch { } result = dataTable; return result; } } using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serialization; using System.Data; namespace cn.EginSoft.Core.Commons { /// /// JSON /// public class JsonHelper { /// /// JSON /// /// /// JSON public static string ObjectToJSON(object obj) { JavaScriptSerializer jss = new JavaScriptSerializer(); try { return jss.Serialize(obj); } 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); } } }