首页 > 代码库 > JSON帮助类

JSON帮助类

using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using System.Runtime.Serialization.Json;using System.IO;namespace A_HDL_CLassToolDLL{    public class JSONTOOL    {        /// <summary>          /// 序列化集合对象          /// </summary>          public static string JsonSerializerByArrayData<T>(T[] tArray)        {            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[]));            MemoryStream ms = new MemoryStream();            ser.WriteObject(ms, tArray);            string jsonString = Encoding.UTF8.GetString(ms.ToArray());            ms.Close();            string p = @"\\/Date(\d+)\+\d+\\/";            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);            Regex reg = new Regex(p);            jsonString = reg.Replace(jsonString, matchEvaluator);            return jsonString;        }        /// <summary>          /// 序列化单个对象          /// </summary>          public static string JsonSerializerBySingleData<T>(T t)        {            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));            MemoryStream ms = new MemoryStream();            ser.WriteObject(ms, t);            string jsonString = Encoding.UTF8.GetString(ms.ToArray());            ms.Close();            string p = @"\\/Date(\d+)\+\d+\\/";            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);            Regex reg = new Regex(p);            jsonString = reg.Replace(jsonString, matchEvaluator);            return jsonString;        }        /// <summary>           /// 反序列化单个对象          /// </summary>           public static T JsonDeserializeBySingleData<T>(string jsonString)        {            //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式                string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);            Regex reg = new Regex(p);            jsonString = reg.Replace(jsonString, matchEvaluator);            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));            T obj = (T)ser.ReadObject(ms);            return obj;        }        /// <summary>           /// 反序列化集合对象          /// </summary>           public static T[] JsonDeserializeByArrayData<T>(string jsonString)        {            //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式                string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);            Regex reg = new Regex(p);            jsonString = reg.Replace(jsonString, matchEvaluator);            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[]));            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));            T[] arrayObj = (T[])ser.ReadObject(ms);            return arrayObj;        }        /// <summary>           /// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串           /// </summary>           private static string ConvertJsonDateToDateString(Match m)        {            string result = string.Empty;            DateTime dt = new DateTime(1970, 1, 1);            dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));            dt = dt.ToLocalTime();            result = dt.ToString("yyyy-MM-dd HH:mm:ss");            return result;        }        /// <summary>            /// 将时间字符串转为Json时间           /// </summary>           private static string ConvertDateStringToJsonDate(Match m)        {            string result = string.Empty;            DateTime dt = DateTime.Parse(m.Groups[0].Value);            dt = dt.ToUniversalTime();            TimeSpan ts = dt - DateTime.Parse("1970-01-01");            result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);            return result;        }        /// <summary>          /// List转成json           /// </summary>          /// <typeparam name="T"></typeparam>          /// <param name="list"></param>          /// <returns></returns>          public static string ListToJson<T>(IList<T> list)        {            object obj = list[0];            return ListToJson<T>(list, obj.GetType().Name);        }        /// <summary>           /// 对象转换为Json字符串           /// </summary>           /// <param name="jsonObject">对象</param>           /// <returns>Json字符串</returns>           public static string ToJson(object jsonObject)        {            try            {                StringBuilder jsonString = new StringBuilder();                jsonString.Append("{");                PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();                for (int i = 0; i < propertyInfo.Length; i++)                {                    object objectValue = http://www.mamicode.com/propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);                    if (objectValue =http://www.mamicode.com/= null)                    {                        continue;                    }                    StringBuilder value = new StringBuilder();                    if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)                    {                        value.Append("\"" + objectValue.ToString() + "\"");                    }                    else if (objectValue is string)                    {                        value.Append("\"" + objectValue.ToString() + "\"");                    }                    else if (objectValue is IEnumerable)                    {                        value.Append(ToJson((IEnumerable)objectValue));                    }                    else                    {                        value.Append("\"" + objectValue.ToString() + "\"");                    }                    jsonString.Append("\"" + propertyInfo[i].Name + "\":" + value + ","); ;                }                return jsonString.ToString().TrimEnd(,) + "}";            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>           /// 对象集合转换Json           /// </summary>           /// <param name="array">集合对象</param>           /// <returns>Json字符串</returns>           public static string ToJson(IEnumerable array)        {            string jsonString = "[";            foreach (object item in array)            {                jsonString += ToJson(item) + ",";            }            if (jsonString.Length > 1)            {                jsonString.Remove(jsonString.Length - 1, jsonString.Length);            }            else            {                jsonString = "[]";            }            return jsonString + "]";        }        /// <summary>           /// 普通集合转换Json           /// </summary>           /// <param name="array">集合对象</param>           /// <returns>Json字符串</returns>           public static string ToArrayString(IEnumerable array)        {            string jsonString = "[";            foreach (object item in array)            {                jsonString = ToJson(item.ToString()) + ",";            }            jsonString.Remove(jsonString.Length - 1, jsonString.Length);            return jsonString + "]";        }        /// <summary>           /// Datatable转换为Json           /// </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 =http://www.mamicode.com/ drc[i][j].ToString();                    Type type = dt.Columns[j].DataType;                    jsonString.Append("\"" + strKey + "\":");                    //过滤数据                    //strValue = http://www.mamicode.com/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>          /// List转成json           /// </summary>          /// <typeparam name="T"></typeparam>          /// <param name="jsonName"></param>          /// <param name="list"></param>          /// <returns></returns>          public static string ListToJson<T>(IList<T> list, string jsonName)        {            StringBuilder Json = new StringBuilder();            if (string.IsNullOrEmpty(jsonName))                jsonName = list[0].GetType().Name;            Json.Append("{\"" + jsonName + "\":[");            if (list.Count > 0)            {                for (int i = 0; i < list.Count; i++)                {                    T obj = Activator.CreateInstance<T>();                    PropertyInfo[] pi = obj.GetType().GetProperties();                    Json.Append("{");                    for (int j = 0; j < pi.Length; j++)                    {                        Type type;                        object o = pi[j].GetValue(list[i], null);                        string v = string.Empty;                        if (o != null)                        {                            type = o.GetType();                            v = o.ToString();                        }                        else                        {                            type = typeof(string);                        }                        Json.Append("\"" + pi[j].Name.ToString() + "\":" + v);//过滤数据// StringFormat(v, type));                        if (j < pi.Length - 1)                        {                            Json.Append(",");                        }                    }                    Json.Append("}");                    if (i < list.Count - 1)                    {                        Json.Append(",");                    }                }            }            Json.Append("]}");            return Json.ToString();        }        /// <summary>           /// DataSet转换为Json           /// </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>           /// 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 =http://www.mamicode.com/ dataReader[i].ToString();                        jsonString.Append("\"" + strKey + "\":");                        //过滤数据                        //strValue = http://www.mamicode.com/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>          /// DataTable转成Json           /// </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();        }    }}
using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Reflection;using System.Collections;using System.Data.Common;namespace DotNet.Utilities{    //JSON转换类    public class ConvertJson    {        #region 私有方法        /// <summary>        /// 过滤特殊字符        /// </summary>        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 \n:                        sb.Append("\\n"); break;                    case \r:                        sb.Append("\\r"); break;                    case \t:                        sb.Append("\\t"); break;                    default:                        sb.Append(c); break;                }            }            return sb.ToString();        }        /// <summary>        /// 格式化字符型、日期型、布尔型        /// </summary>        private static string StringFormat(string str, Type type)        {            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(string) && string.IsNullOrEmpty(str))            {                str = "\"" + str + "\"";            }            return str;        }        #endregion        #region List转换成Json        /// <summary>        /// List转换成Json        /// </summary>        public static string ListToJson<T>(IList<T> list)        {            object obj = list[0];            return ListToJson<T>(list, obj.GetType().Name);        }        /// <summary>        /// List转换成Json         /// </summary>        public static string ListToJson<T>(IList<T> list, string jsonName)        {            StringBuilder Json = new StringBuilder();            if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name;            Json.Append("{\"" + jsonName + "\":[");            if (list.Count > 0)            {                for (int i = 0; i < list.Count; i++)                {                    T obj = Activator.CreateInstance<T>();                    PropertyInfo[] pi = obj.GetType().GetProperties();                    Json.Append("{");                    for (int j = 0; j < pi.Length; j++)                    {                        Type type = pi[j].GetValue(list[i], null).GetType();                        Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));                        if (j < pi.Length - 1)                        {                            Json.Append(",");                        }                    }                    Json.Append("}");                    if (i < list.Count - 1)                    {                        Json.Append(",");                    }                }            }            Json.Append("]}");            return Json.ToString();        }        #endregion        #region 对象转换为Json        /// <summary>         /// 对象转换为Json         /// </summary>         /// <param name="jsonObject">对象</param>         /// <returns>Json字符串</returns>         public static string ToJson(object jsonObject)        {            string jsonString = "{";            PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();            for (int i = 0; i < propertyInfo.Length; i++)            {                object objectValue = http://www.mamicode.com/propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);                string value = http://www.mamicode.com/string.Empty;                if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)                {                    value = "" + objectValue.ToString() + "";                }                else if (objectValue is string)                {                    value = "" + ToJson(objectValue.ToString()) + "";                }                else if (objectValue is IEnumerable)                {                    value = ToJson((IEnumerable)objectValue);                }                else                {                    value = ToJson(objectValue.ToString());                }                jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";            }            jsonString.Remove(jsonString.Length - 1, jsonString.Length);            return jsonString + "}";        }        #endregion        #region 对象集合转换Json        /// <summary>         /// 对象集合转换Json         /// </summary>         /// <param name="array">集合对象</param>         /// <returns>Json字符串</returns>         public static string ToJson(IEnumerable array)        {            string jsonString = "[";            foreach (object item in array)            {                jsonString += ToJson(item) + ",";            }            jsonString.Remove(jsonString.Length - 1, jsonString.Length);            return jsonString + "]";        }        #endregion        #region 普通集合转换Json        /// <summary>         /// 普通集合转换Json         /// </summary>         /// <param name="array">集合对象</param>         /// <returns>Json字符串</returns>         public static string ToArrayString(IEnumerable array)        {            string jsonString = "[";            foreach (object item in array)            {                jsonString = ToJson(item.ToString()) + ",";            }            jsonString.Remove(jsonString.Length - 1, jsonString.Length);            return jsonString + "]";        }        #endregion        #region  DataSet转换为Json        /// <summary>         /// DataSet转换为Json         /// </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 + "}";        }        #endregion        #region Datatable转换为Json        /// <summary>         /// Datatable转换为Json         /// </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 =http://www.mamicode.com/ 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();        }        /// <summary>        /// DataTable转换为Json         /// </summary>        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].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();        }        #endregion        #region DataReader转换为Json        /// <summary>         /// DataReader转换为Json         /// </summary>         /// <param name="dataReader">DataReader对象</param>         /// <returns>Json字符串</returns>         public static string ToJson(DbDataReader dataReader)        {            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 =http://www.mamicode.com/ dataReader[i].ToString();                    jsonString.Append("\"" + strKey + "\":");                    strValue = StringFormat(strValue, type);                    if (i < dataReader.FieldCount - 1)                    {                        jsonString.Append(strValue + ",");                    }                    else                    {                        jsonString.Append(strValue);                    }                }                jsonString.Append("},");            }            dataReader.Close();            jsonString.Remove(jsonString.Length - 1, 1);            jsonString.Append("]");            return jsonString.ToString();        }        #endregion    }}

 

JSON帮助类