• 公共的Json操作C#类


    using System;
    using System.Data;
    using System.Text;
    using System.Collections.Generic;
    using System.Reflection;
    using System.Data.Common;
    using System.Collections;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Runtime.Serialization.Json;
    
    
    namespace System.Common
    {
        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)
            {
                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() + "":" + 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>
            /// 序列化集合对象
            /// </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}sd{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}sd{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 = 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 '':
                            sb.Append("\b"); break;
                        case 'f':
                            sb.Append("\f"); break;
                        case '
    ':
                            sb.Append("\n"); break;
                        case '
    ':
                            sb.Append("\r"); break;
                        case '	':
                            sb.Append("\t"); break;
                        case 'v':
                            sb.Append("\v"); break;
                        case '':
                            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 = "
    <script type="text/javascript" src="/ajaxpro/prototype.ashx"></script>
    "
                + "<script type="text/javascript" src="/ajaxpro/core.ashx"></script>
    "
                + "<script type="text/javascript" src="/ajaxpro/converter.ashx"></script>
    "
                + "<script type="text/javascript" src="/ajaxpro/" + assemblyName + ".ashx"></script>
    ";
                Header.Controls.Add(l);
            }
        }
    }
  • 相关阅读:
    MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)
    MySql cmd下的学习笔记 —— 有关视图的操作(algorithm)
    MySql cmd下的学习笔记 —— 有关视图的操作(建立表)
    MySql cmd下的学习笔记 —— 有关常用函数的介绍(数学函数,聚合函数等等)
    MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)
    MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)
    MySql cmd下的学习笔记 —— 有关子查询的操作(where型,from型,exists型子查询)
    MySql cmd下的学习笔记 —— 有关select的操作(order by,limit)
    剑指Offer--第21题 调整数组顺序使奇数位于偶数前面;
    剑指Offer--和为s的连续正数序列
  • 原文地址:https://www.cnblogs.com/xhety/p/3823665.html
Copyright © 2020-2023  润新知