.net中将Json包装类

来源:互联网 发布:mac set android ndk 编辑:程序博客网 时间:2024/04/29 01:26
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using System.Data;using System.Collections;using System.Reflection;using System.Text.RegularExpressions;using System.Runtime.Serialization.Json;using System.IO;using System.Web.Script.Serialization;namespace ConsoleWSTest{    public static class Json    {        /// <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)        {            JavaScriptSerializer jss = new JavaScriptSerializer();            try            {                return jss.Serialize(list);            }            catch (Exception ex)            {                throw new Exception("JSONHelper.JSONToObject(): " + ex.Message);            }        }        public static string ObjectToJson(object obj)        {            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();            try            {                return jss.Serialize(obj);            }            catch (Exception ex)            {                throw new Exception("JSONHelper.JSONToObject(): " + ex.Message);            }        }        /// <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)        {            JavaScriptSerializer jss = new JavaScriptSerializer();            try            {                return jss.Deserialize<T>(jsonString);            }            catch (Exception ex)            {                throw new Exception("JSONHelper.JSONToObject(): " + ex.Message);            }        }        /// <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 = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);                    if (objectValue == 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 = 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>        /// 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();        }        /// <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        /// </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>        /// 过滤特殊字符        /// </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();        }        /// <summary>        /// 格式化字符型、日期型、布尔型        /// </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;        }        public static void RegistAjax(HtmlHead Header, Type type)        {            string assemblyName = type.FullName + "," + type.Assembly.FullName.Substring(0, type.Assembly.FullName.IndexOf(","));            if (type.Assembly.FullName.StartsWith("App_Code."))            {                assemblyName = type.FullName + ",App_Code";            }            Literal l = new Literal();            l.Text = "\n<script type=\"text/javascript\" src=\"/ajaxpro/prototype.ashx\"></script>\n"            + "<script type=\"text/javascript\" src=\"/ajaxpro/core.ashx\"></script>\n"            + "<script type=\"text/javascript\" src=\"/ajaxpro/converter.ashx\"></script>\n"            + "<script type=\"text/javascript\" src=\"/ajaxpro/" + assemblyName + ".ashx\"></script>\n";            Header.Controls.Add(l);        }    }}

原创粉丝点击