• ConvertJson.cs(20170223)


    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Common;
    using System.Reflection;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Web.Script.Serialization;
    
    namespace WebQiXingCai.Common
    {
        /// <summary>
        /// JSON转换类
        /// </summary>
        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 '':
                            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;
                        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++)
                        {
                            if (pi[j].GetValue(list[i], null) == null)
                            {
                                Json.Append(""" + pi[j].Name.ToString() + "":null");
                            }
                            else
                            {
                                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 = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
                    string value = 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)
            {
                if (dataSet.Tables[0].Rows.Count > 0)
                {
                    string jsonString = "{";
                    foreach (DataTable table in dataSet.Tables)
                    {
                        jsonString += """ + table.TableName + "":" + ToJson(table) + ",";
                    }
                    jsonString = jsonString.TrimEnd(',');
                    return jsonString + "}";
                }
                else
                {
                    return "[]";
                }
            }
    
    
            /// <summary> 
            /// DataSet转换为标准Json 
            /// </summary> 
            /// <param name="dataSet">DataSet对象</param> 
            /// <returns>Json字符串</returns> 
            public static string ToStandardJson(DataSet dataSet)
            {
    
                if (dataSet.Tables[0].Rows.Count > 0)
                {
                    string jsonString = "";
                    foreach (DataTable table in dataSet.Tables)
                    {
                        jsonString += ToJson(table) + ",";
                    }
                    jsonString = jsonString.TrimEnd(',');
                    return jsonString;
                }
                else
                {
                    return "[]";
                }
    
            }
            #endregion
    
            #region Datatable转换为Json
            /// <summary> 
            /// Datatable转换为Json 
            /// </summary> 
            /// <param name="table">Datatable对象</param> 
            /// <returns>Json字符串</returns> 
            public static string ToJson(DataTable dt)
            {
                if (dt.Rows.Count == 0)
                {
                    return "[]";
                }
                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();
            }
    
    
            /// <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 = 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
    
            #region 数据表转字典
    
            /// <summary>
            /// 表转Dictionary字典
            /// </summary>
            public static Dictionary<string, object> ToDic(DataTable dt)
            {
                Dictionary<string, object> dic = new Dictionary<string, object>();
                DataRowCollection drc = dt.Rows;
                for (int i = 0; i < drc.Count; i++)
                {
    
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        string strKey = dt.Columns[j].ColumnName + "[" + i + "]";
                        string strValue = drc[i][j].ToString();
                        dic.Add(strKey, strValue);
                    }
    
                }
    
                return dic;
    
            }
    
    
    
            #endregion
    
            #region Dictionary字典与json互转
    
    
            /// <summary>
            /// Dictionary字典转json
            /// </summary>
            /// <param name="dic"></param>
            /// <returns></returns>
            public static string ToJson(Dictionary<string, object> dic)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                string json = (jss).Serialize(dic);
                return json;
            }
    
            /// <summary>
            /// json转Dictionary字典
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static Dictionary<string, object> ToDic(string json)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                Dictionary<string, object> dic = jss.Deserialize<Dictionary<string, object>>(json);
                return dic;
            }
    
    
            #endregion
    
            #region DataTable转json二维数组
    
    
            /// <summary>
            /// DataSet转json二维数组
            /// </summary>
            /// <param name="dataSet"></param>
            /// <returns></returns>
            public static string ToArrJson(DataSet dataSet)
            {
                string jsonString = "";
                foreach (DataTable table in dataSet.Tables)
                {
                    jsonString += ToArrJson(table) + ",";
                }
                jsonString = jsonString.TrimEnd(',');
                return jsonString;
            }
    
    
    
            /// <summary>
            /// DataTable转json二维数组
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string ToArrJson(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)
                        {
                            jsonString.Append(strValue + ",");
                        }
                        if (j == dt.Columns.Count - 1)
                        {
                            jsonString.Remove(jsonString.Length - 1, 1);
                        }
                    }
                    jsonString.Append("],");
                }
                jsonString.Remove(jsonString.Length - 1, 1);
                jsonString.Append("]");
                return jsonString.ToString();
            }
    
            #endregion
    
            #region Json转换别的类型
    
            /// <summary>
            /// 将json转换为DataTable
            /// </summary>
            /// <param name="strJson">得到的json</param>
            /// <returns></returns>
            public static DataTable JsonToDataTable(string strJson)
            {
                //转换json格式
                strJson = strJson.Replace(","", "*"").Replace("":", ""#").ToString();
                //取出表名   
                var rg = new Regex(@"(?<={)[^:]+(?=:[)", RegexOptions.IgnoreCase);
                string strName = rg.Match(strJson).Value;
                DataTable tb = null;
                //去除表名   
                strJson = strJson.Substring(strJson.IndexOf("[") + 1);
                strJson = strJson.Substring(0, strJson.IndexOf("]"));
    
                //获取数据   
                rg = new Regex(@"(?<={)[^}]+(?=})");
                MatchCollection mc = rg.Matches(strJson);
                for (int i = 0; i < mc.Count; i++)
                {
                    string strRow = mc[i].Value;
                    string[] strRows = strRow.Split('*');
    
                    //创建表   
                    if (tb == null)
                    {
                        tb = new DataTable();
                        tb.TableName = strName;
                        foreach (string str in strRows)
                        {
                            var dc = new DataColumn();
                            string[] strCell = str.Split('#');
    
                            if (strCell[0].Substring(0, 1) == """)
                            {
                                int a = strCell[0].Length;
                                dc.ColumnName = strCell[0].Substring(1, a - 2);
                            }
                            else
                            {
                                dc.ColumnName = strCell[0];
                            }
                            tb.Columns.Add(dc);
                        }
                        tb.AcceptChanges();
                    }
    
                    //增加内容   
                    DataRow dr = tb.NewRow();
                    for (int r = 0; r < strRows.Length; r++)
                    {
                        dr[r] = strRows[r].Split('#')[1].Trim().Replace("", ",").Replace("", ":").Replace(""", "");
                    }
                    tb.Rows.Add(dr);
                    tb.AcceptChanges();
                }
    
                return tb;
            }
    
    
    
            /// <summary>
            /// json数组转换为ArrayList
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static List<ArrayList> JsonToArrayList(string json)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                List<ArrayList> arr = jss.Deserialize<List<ArrayList>>(json);
                return arr;
            }
    
            /// <summary>
            /// ArrayList转换为json数组
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static string ArrayListToJson(List<ArrayList> arr)
            {
                JavaScriptSerializer jss = new JavaScriptSerializer();
                string json = jss.Serialize(arr);
                return json;
            }
    
            ///// <summary>
            ///// 将json数组转换为DataTable
            ///// </summary>
            ///// <param name="json">得到的json</param>
            /////  <param name="ColumnNumber">几列</param>
            /////  <param name="dtName">表名</param>
            ///// <returns></returns>
            //public static DataTable JsonArrToDataTable(string json, int ColumnNumber, string dtName = "dtarr")
            //{
    
            //    JavaScriptSerializer jss = new JavaScriptSerializer();
            //    List<ArrayList> arr = jss.Deserialize<List<ArrayList>>(json);
            //    DataTable tb = new DataTable();
            //    tb.TableName = dtName;
    
            //    DataColumn dc = null;
            //    for (int r = 0; r < 1; r++)
            //    {
            //        dc = new DataColumn();
            //        dc.ColumnName = arr[i][r].ToString();
            //    }
            //    tb.Columns.Add(dc);
            //    for (int i = 0; i < arr.Count; i++)
            //    {
    
            //        DataRow dr = tb.NewRow();
            //        tb.Rows.Add(dr);
            //        tb.AcceptChanges();
            //    }
    
            //    return tb;
            //}
    
    
            #endregion
    
            #region json扩展信息
    
            /// <summary>
            /// <para>json扩展对象</para>
            /// <para>此方法必须调用ToJson方法生成的json才可以,就是与ToJson方法配合使用</para>
            /// <para>调用ToJsonExtended(json, "test", "{"msg":"测试消息"}");</para>
            /// <para>生成后的json比如: {"ds":[{"p_Id":3,"p_Code":"QHO50S","p_Name":"前海油"}],"test":{"msg":"测试消息"}}</para>
            /// </summary>
            /// <param name="json">原json字符串</param>
            /// <param name="Name">扩展json对象名</param>
            /// <param name="jsonobj">扩展json对象</param>
            /// <returns>返回json字符串</returns>
            public static string ToJsonExtended(string json, string Name, string jsonobj)
            {
    
                json = json.Insert(json.Length - 1, ","" + Name + "":" + jsonobj);
                return json;
            }
    
            /// <summary>
            /// <para>此方法通用无需配合其他方法,最好与ToStandardJson配合方法使用</para>
            /// <para>如与ToJson方法一起使用会出现{"ds":{"ds":[{}]}}多层对象</para>
            /// <para>调用ToStandardJsonExtended(json, "test", "{"msg":"测试消息"}");</para>
            /// <para>如需多个json调用ToStandardJsonExtended(json, "test", "{"msg":"测试消息"}, "test2": {"msg2": "测试消息2"}");</para>
            /// </summary>
            /// <param name="json">原json</param>
            /// <param name="Name">扩展json名</param>
            /// <param name="jsonobj">扩展json对象</param>
            /// <returns></returns>
            public static string ToStandardJsonExtended(string json, string Name, string jsonobj)
            {
                json = json.Insert(0, "{"ds":");
                json = json.Insert(json.Length, ","" + Name + "":" + jsonobj + "}");
                return json;
            }
    
            #endregion
        }
    }
  • 相关阅读:
    JS学习之构造函数、原型、原型链
    JS学习之面向对象(面向对象的创建方法,new运算符的工作原理)
    JS学习之事件流
    JS学习之生命周期与垃圾回收机制
    关于在XP操作系统和IIS5.1环境下的MVC环境搭建之IIS错误
    VS2010、.net 4.0下MVC3开发中Code First开发模式的数据迁移小结
    关于MVC3框架下的Jquery异步请求函数的学习心得之一——$.post()
    关于ASP调用存储过程的经典资料转载
    关于windows环境下的IIS 500内部服务器错误的一种解决办法
    接VS2010+Net+MVC3+EF4.1环境下的Code First一文的补充说明
  • 原文地址:https://www.cnblogs.com/zyx321/p/6435895.html
Copyright © 2020-2023  润新知