【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用...
?四個主要操作類:JsonConverter 、JsonHelper 、JsonSplit 、AjaxResult
一、JsonConverter:
自定義查詢對象轉換動態類、object動態類轉換json包、json轉換object動態類、DataReader轉換為Json、DataSet轉換為Json、DataTable轉成Json、Datatable轉換為Json 、格式化字符型日期型布爾型、過濾特殊字符等
?
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Linq; using System.Web.Script.Serialization; using System.Collections;namespace Common {public class JsonConverter{/// <summary>/// 自定義查詢對象轉換動態類/// add yuangang by 2015-05-19/// </summary>/// <param name="obj"></param>/// <returns></returns>public static dynamic JsonClass(object obj) {return ConvertJson(Serialize(obj, true));}/// <summary>/// object動態類轉換json包/// add yuangang by 2015-05-19/// </summary>/// <param name="obj">對象</param>/// <param name="DateConvert">時間戳是否轉換成日期類型</param>/// <returns></returns>public static string Serialize(object obj, bool DateConvert = false){JavaScriptSerializer jss = new JavaScriptSerializer();var str = jss.Serialize(obj);if (DateConvert){str = System.Text.RegularExpressions.Regex.Replace(str, @"\\/Date\((\d+)\)\\/", match =>{DateTime dt = new DateTime(1970, 1, 1);dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));dt = dt.ToLocalTime();return dt.ToString("yyyy-MM-dd HH:mm:ss");});}return str;}/// <summary>/// json轉換object動態類/// add yuangang by 2015-05-19/// </summary>/// <param name="json"></param>/// <returns></returns>public static dynamic ConvertJson(string json){JavaScriptSerializer jss = new JavaScriptSerializer();jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() });dynamic dy = jss.Deserialize(json, typeof(object)) as dynamic;return dy;}/// <summary> /// DataReader轉換為Json /// </summary> /// <param name="dataReader">DataReader對象</param> /// <returns>Json字符串</returns> public static string ToJson(IDataReader dataReader){try{StringBuilder jsonString = new StringBuilder();jsonString.Append("[");while (dataReader.Read()){jsonString.Append("{");for (int i = 0; i < dataReader.FieldCount; i++){Type type = dataReader.GetFieldType(i);string strKey = dataReader.GetName(i);string strValue = dataReader[i].ToString();jsonString.Append("\"" + strKey + "\":");strValue = StringFormat(strValue, type);if (i < dataReader.FieldCount - 1){jsonString.Append(strValue + ",");}else{jsonString.Append(strValue);}}jsonString.Append("},");}if (!dataReader.IsClosed){dataReader.Close();}jsonString.Remove(jsonString.Length - 1, 1);jsonString.Append("]");if (jsonString.Length == 1){return "[]";}return jsonString.ToString();}catch (Exception ex){throw ex;}}/// <summary> /// DataSet轉換為Json /// add yuangang by 2015-05-19/// </summary> /// <param name="dataSet">DataSet對象</param> /// <returns>Json字符串</returns> public static string ToJson(DataSet dataSet){string jsonString = "{";foreach (DataTable table in dataSet.Tables){jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";}jsonString = jsonString.TrimEnd(',');return jsonString + "}";}/// <summary> /// DataTable轉成Json /// add yuangang by 2015-05-19/// </summary> /// <param name="jsonName"></param> /// <param name="dt"></param> /// <returns></returns> public static string ToJson(DataTable dt, string jsonName){StringBuilder Json = new StringBuilder();if (string.IsNullOrEmpty(jsonName))jsonName = dt.TableName;Json.Append("{\"" + jsonName + "\":[");if (dt.Rows.Count > 0){for (int i = 0; i < dt.Rows.Count; i++){Json.Append("{");for (int j = 0; j < dt.Columns.Count; j++){Type type = dt.Rows[i][j].GetType();Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j] is DBNull ? string.Empty : dt.Rows[i][j].ToString(), type));if (j < dt.Columns.Count - 1){Json.Append(",");}}Json.Append("}");if (i < dt.Rows.Count - 1){Json.Append(",");}}}Json.Append("]}");return Json.ToString();}/// <summary> /// Datatable轉換為Json /// add yuangang by 2015-05-19/// </summary> /// <param name="table">Datatable對象</param> /// <returns>Json字符串</returns> 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("]");if (jsonString.Length == 1){return "[]";}return jsonString.ToString();} /// <summary> /// 格式化字符型、日期型、布爾型 /// add yuangang by 2015-05-19/// </summary> /// <param name="str"></param> /// <param name="type"></param> /// <returns></returns> private static string StringFormat(string str, Type type){if (type != typeof(string) && string.IsNullOrEmpty(str)){str = "\"" + str + "\"";}else if (type == typeof(string)){str = String2Json(str);str = "\"" + str + "\"";}else if (type == typeof(DateTime)){str = "\"" + str + "\"";}else if (type == typeof(bool)){str = str.ToLower();}else if (type == typeof(byte[])){str = "\"" + str + "\"";}else if (type == typeof(Guid)){str = "\"" + str + "\"";}return str;}/// <summary> /// 過濾特殊字符 /// add yuangang by 2015-05-19/// </summary> /// <param name="s"></param> /// <returns></returns> public 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 '\n':sb.Append("\\n"); break;case '\r':sb.Append("\\r"); break;case '\t':sb.Append("\\t"); break;case '\v':sb.Append("\\v"); break;case '\0':sb.Append("\\0"); break;default:sb.Append(c); break;}}return sb.ToString();}public static string GetDataGridJsonByDataSet(DataSet ds, string totalProperty, string root){return GetDataGridJsonByDataTable(ds.Tables[0], totalProperty, root);}public static string GetDataGridJsonByDataTable(DataTable dt, string totalProperty, string root){StringBuilder jsonBuilder = new StringBuilder();jsonBuilder.Append("({\"" + totalProperty + "\":\"" + dt.Rows.Count + "\",");jsonBuilder.Append("\"");jsonBuilder.Append(root);jsonBuilder.Append("\":[");for (int i = 0; i < dt.Rows.Count; i++){jsonBuilder.Append("{");for (int j = 0; j < dt.Columns.Count; j++){jsonBuilder.Append("\"");jsonBuilder.Append(dt.Columns[j].ColumnName);jsonBuilder.Append("\":\"");jsonBuilder.Append(dt.Rows[i][j].ToString());jsonBuilder.Append("\",");}jsonBuilder.Remove(jsonBuilder.Length - 1, 1);jsonBuilder.Append("},");}jsonBuilder.Remove(jsonBuilder.Length - 1, 1);jsonBuilder.Append("]");jsonBuilder.Append("})");return jsonBuilder.ToString();}public static string GetTreeJsonByDataSet(DataSet ds){return GetTreeJsonByDataTable(ds.Tables[0]);}public static string GetTreeJsonByDataTable(DataTable dataTable){DataTable dt = FormatDataTableForTree(dataTable);StringBuilder jsonBuilder = new StringBuilder();jsonBuilder.Append("[");for (int i = 0; i < dt.Rows.Count; i++){jsonBuilder.Append("{");for (int j = 0; j < dt.Columns.Count; j++){jsonBuilder.Append("\'");if (dt.Columns[j].ColumnName == "leaf"){string leafValue = dt.Rows[i][j].ToString();if (!string.IsNullOrEmpty(leafValue)){jsonBuilder.Append(dt.Columns[j].ColumnName);jsonBuilder.Append("\':\'");jsonBuilder.Append(dt.Rows[i][j].ToString());jsonBuilder.Append("\',");}else{jsonBuilder.Remove(jsonBuilder.Length - 1, 1);}}else if (dt.Columns[j].ColumnName == "customUrl"){jsonBuilder.Remove(jsonBuilder.Length - 1, 1);jsonBuilder.Append(dt.Columns[j].ColumnName);jsonBuilder.Append(":\'");jsonBuilder.Append(dt.Rows[i][j].ToString());jsonBuilder.Append("\',");}else{jsonBuilder.Append(dt.Columns[j].ColumnName);jsonBuilder.Append("\':\'");jsonBuilder.Append(dt.Rows[i][j].ToString());jsonBuilder.Append("\',");}}jsonBuilder.Remove(jsonBuilder.Length - 1, 1);jsonBuilder.Append("},");}jsonBuilder.Remove(jsonBuilder.Length - 1, 1);jsonBuilder.Append("]");return jsonBuilder.ToString();}private static DataTable FormatDataTableForTree(DataTable dt){DataTable dtTree = new DataTable();dtTree.Columns.Add("id", typeof(string));dtTree.Columns.Add("text", typeof(string));dtTree.Columns.Add("leaf", typeof(string));dtTree.Columns.Add("cls", typeof(string));dtTree.Columns.Add("customUrl", typeof(string));dtTree.AcceptChanges();for (int i = 0; i < dt.Rows.Count; i++){DataRow drTree = dtTree.NewRow();drTree["id"] = dt.Rows[i]["id"].ToString();drTree["text"] = dt.Rows[i]["text"].ToString();if (dt.Rows[i]["leaf"].ToString() == "Y"){drTree["leaf"] = "true";drTree["cls"] = "file";}else{drTree["cls"] = "folder";}drTree["customUrl"] = dt.Rows[i]["customUrl"].ToString();dtTree.Rows.Add(drTree);}return dtTree;}}/// <summary>/// 動態JSON解析/// add yuangang by 2015-05-19/// </summary>public class DynamicJsonObject : System.Dynamic.DynamicObject{private IDictionary<string, object> Dictionary { get; set; }public DynamicJsonObject(IDictionary<string, object> dictionary){this.Dictionary = dictionary;}public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result){result = this.Dictionary[binder.Name];if (result is IDictionary<string, object>){result = new DynamicJsonObject(result as IDictionary<string, object>);}else if (result is ArrayList && (result as ArrayList) is IDictionary<string, object>){result = new List<DynamicJsonObject>((result as ArrayList).ToArray().Select(x => new DynamicJsonObject(x as IDictionary<string, object>)));}else if (result is ArrayList){result = new List<object>((result as ArrayList).ToArray());}return this.Dictionary.ContainsKey(binder.Name);}}/// <summary>/// 動態JSON轉換/// add yuangang by 2015-05-19/// </summary>public class DynamicJsonConverter : JavaScriptConverter{public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer){if (dictionary == null)throw new ArgumentNullException("dictionary");if (type == typeof(object)){return new DynamicJsonObject(dictionary);}return null;}public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer){throw new NotImplementedException();}public override IEnumerable<Type> SupportedTypes{get { return new System.Collections.ObjectModel.ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(object) })); }}} }?
?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
二、JsonHelper:json的輔助類
using System.Collections.Generic; using System.Text; using Newtonsoft.Json; using System.Runtime.Serialization.Json; using System.IO;namespace Common {/// <summary>/// 提供了一個關于json的輔助類/// </summary>public class JsonHelper{#region Method/// <summary>/// 類對像轉換成json格式/// </summary> /// <returns></returns>public static string ToJson(object t){return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include });}/// <summary>/// 類對像轉換成json格式/// </summary>/// <param name="t"></param>/// <param name="HasNullIgnore">是否忽略NULL值</param>/// <returns></returns>public static string ToJson(object t, bool HasNullIgnore){if (HasNullIgnore)return JsonConvert.SerializeObject(t, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });elsereturn ToJson(t);}/// <summary>/// json格式轉換/// </summary>/// <typeparam name="T"></typeparam>/// <param name="strJson"></param>/// <returns></returns>public static T FromJson<T>(string strJson) where T : class{if (!strJson.IsNullOrEmpty())return JsonConvert.DeserializeObject<T>(strJson);return null;}/// <summary>/// 功能描述:將List轉換為Json/// </summary>/// <param name="a"></param>/// <returns></returns>public static string ListToJson(IList<object> a){DataContractJsonSerializer json = new DataContractJsonSerializer(a.GetType());string szJson = "";//序列化using (MemoryStream stream = new MemoryStream()){json.WriteObject(stream, a);szJson = Encoding.UTF8.GetString(stream.ToArray());}return szJson;}#endregion#region Property/// <summary>/// 數據狀態/// </summary>public string Status { get; set; }/// <summary>/// 提示信息/// </summary>public string Msg { get; set; }/// <summary>/// 回傳URL/// </summary>public string ReUrl { get; set; }/// <summary>/// 數據包/// </summary>public object Data { get; set; }#endregion} }?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
三、JsonSplit:判斷字符串是否為Json
?
?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
四、AjaxResult:前臺Ajax請求的統一返回結果類
using System.Web.Script.Serialization; namespace Common {/// <summary>/// 前臺Ajax請求的統一返回結果類/// </summary>public class AjaxResult{private AjaxResult(){}private bool iserror = false;/// <summary>/// 是否產生錯誤/// </summary>public bool IsError { get { return iserror; } }/// <summary>/// 錯誤信息,或者成功信息/// </summary>public string Message { get; set; }/// <summary>/// 成功可能時返回的數據/// </summary>public object Data { get; set; }#region Errorpublic static AjaxResult Error(){return new AjaxResult(){iserror = true};}public static AjaxResult Error(string message){return new AjaxResult(){iserror = true,Message = message};}#endregion#region Successpublic static AjaxResult Success(){return new AjaxResult(){iserror = false};}public static AjaxResult Success(string message){return new AjaxResult(){iserror = false,Message = message};}public static AjaxResult Success(object data){return new AjaxResult(){iserror = false,Data = data};}public static AjaxResult Success(object data, string message){return new AjaxResult(){iserror = false,Data = data,Message = message};}#endregion/// <summary>/// 序列化/// </summary>/// <returns></returns>public override string ToString(){return new JavaScriptSerializer().Serialize(this);}} }?
?
常用的一些Json操作類,留備。會繼續為大家分享一些 常用的 公共幫助類。
?
原創文章 轉載請尊重勞動成果?http://yuangang.cnblogs.com
?
轉載于:https://www.cnblogs.com/yuangang/p/5468777.html
總結
以上是生活随笔為你收集整理的【C#公共帮助类】JsonHelper 操作帮助类, 以后再也不用满地找Json了,拿来直接用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站安装打包 软件环境检测与安装[二]
- 下一篇: c# char unsigned_dll