zoukankan      html  css  js  c++  java
  • C#中的json操作

      1 //JSON转换类
      2    public class ConvertJsonUtils
      3    {
      4        #region 私有方法
      5        /// <summary>
      6        /// 过滤特殊字符
      7        /// </summary>
      8        private static string String2Json(String s)
      9        {
     10            StringBuilder sb = new StringBuilder();
     11            for (int i = 0; i < s.Length; i++)
     12            {
     13                char c = s.ToCharArray()[i];
     14                switch (c)
     15                {
     16                    case '"':
     17                        sb.Append("\""); break;
     18                    case '\':
     19                        sb.Append("\\"); break;
     20                    case '/':
     21                        sb.Append("\/"); break;
     22                    case '':
     23                        sb.Append("\b"); break;
     24                    case 'f':
     25                        sb.Append("\f"); break;
     26                    case '
    ':
     27                        sb.Append("\n"); break;
     28                    case '
    ':
     29                        sb.Append("\r"); break;
     30                    case '	':
     31                        sb.Append("\t"); break;
     32                    default:
     33                        sb.Append(c); break;
     34                }
     35            }
     36            return sb.ToString();
     37        }
     38  
     39        /// <summary>
     40        /// 格式化字符型、日期型、布尔型
     41        /// </summary>
     42        private static string StringFormat(string str, Type type)
     43        {
     44            if (type == typeof(string))
     45            {
     46                str = String2Json(str);
     47                str = """ + str + """;
     48            }
     49            else if (type == typeof(DateTime))
     50            {
     51                str = """ + str + """;
     52            }
     53            else if (type == typeof(bool))
     54            {
     55                str = str.ToLower();
     56            }
     57            else if (type != typeof(string) && string.IsNullOrEmpty(str))
     58            {
     59                str = """ + str + """;
     60            }
     61            return str;
     62        }
     63        #endregion
     64  
     65        #region List转换成Json
     66        /// <summary>
     67        /// List转换成Json
     68        /// </summary>
     69        public static string ListToJson<T>(IList<T> list)
     70        {
     71            object obj = list[0];
     72            return ListToJson<T>(list, obj.GetType().Name);
     73        }
     74  
     75        /// <summary>
     76        /// List转换成Json 
     77        /// </summary>
     78        public static string ListToJson<T>(IList<T> list, string jsonName)
     79        {
     80            StringBuilder Json = new StringBuilder();
     81            if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name;
     82            Json.Append("{"" + jsonName + "":[");
     83            if (list.Count > 0)
     84            {
     85                for (int i = 0; i < list.Count; i++)
     86                {
     87                    T obj = Activator.CreateInstance<T>();
     88                    PropertyInfo[] pi = obj.GetType().GetProperties();
     89                    Json.Append("{");
     90                    for (int j = 0; j < pi.Length; j++)
     91                    {
     92                        Type type = pi[j].GetValue(list[i], null).GetType();
     93                        Json.Append(""" + pi[j].Name.ToString() + "":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));
     94  
     95                        if (j < pi.Length - 1)
     96                        {
     97                            Json.Append(",");
     98                        }
     99                    }
    100                    Json.Append("}");
    101                    if (i < list.Count - 1)
    102                    {
    103                        Json.Append(",");
    104                    }
    105                }
    106            }
    107            Json.Append("]}");
    108            return Json.ToString();
    109        }
    110        #endregion
    111  
    112        #region 对象转换为Json
    113        /// <summary> 
    114        /// 对象转换为Json 
    115        /// </summary> 
    116        /// <param name="jsonObject">对象</param> 
    117        /// <returns>Json字符串</returns> 
    118        public static string ToJson(object jsonObject)
    119        {
    120            string jsonString = "{";
    121            PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();
    122            for (int i = 0; i < propertyInfo.Length; i++)
    123            {
    124                object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
    125                string value = string.Empty;
    126                if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)
    127                {
    128                    value = "'" + objectValue.ToString() + "'";
    129                }
    130                else if (objectValue is string)
    131                {
    132                    value = "'" + ToJson(objectValue.ToString()) + "'";
    133                }
    134                else if (objectValue is IEnumerable)
    135                {
    136                    value = ToJson((IEnumerable)objectValue);
    137                }
    138                else
    139                {
    140                    value = ToJson(objectValue.ToString());
    141                }
    142                jsonString += """ + ToJson(propertyInfo[i].Name) + "":" + value + ",";
    143            }
    144            jsonString.Remove(jsonString.Length - 1, jsonString.Length);
    145            return jsonString + "}";
    146        }
    147        #endregion
    148  
    149        #region 对象集合转换Json
    150        /// <summary> 
    151        /// 对象集合转换Json 
    152        /// </summary> 
    153        /// <param name="array">集合对象</param> 
    154        /// <returns>Json字符串</returns> 
    155        public static string ToJson(IEnumerable array)
    156        {
    157            string jsonString = "[";
    158            foreach (object item in array)
    159            {
    160                jsonString += ToJson(item) + ",";
    161            }
    162            jsonString.Remove(jsonString.Length - 1, jsonString.Length);
    163            return jsonString + "]";
    164        }
    165        #endregion
    166  
    167        #region 普通集合转换Json
    168        /// <summary> 
    169        /// 普通集合转换Json 
    170        /// </summary> 
    171        /// <param name="array">集合对象</param> 
    172        /// <returns>Json字符串</returns> 
    173        public static string ToArrayString(IEnumerable array)
    174        {
    175            string jsonString = "[";
    176            foreach (object item in array)
    177            {
    178                jsonString = ToJson(item.ToString()) + ",";
    179            }
    180            jsonString.Remove(jsonString.Length - 1, jsonString.Length);
    181            return jsonString + "]";
    182        }
    183        #endregion
    184  
    185        #region  DataSet转换为Json
    186        /// <summary> 
    187        /// DataSet转换为Json 
    188        /// </summary> 
    189        /// <param name="dataSet">DataSet对象</param> 
    190        /// <returns>Json字符串</returns> 
    191        public static string ToJson(DataSet dataSet)
    192        {
    193            string jsonString = "{";
    194            foreach (DataTable table in dataSet.Tables)
    195            {
    196                jsonString += """ + table.TableName + "":" + ToJson(table) + ",";
    197            }
    198            jsonString = jsonString.TrimEnd(',');
    199            return jsonString + "}";
    200        }
    201        #endregion
    202  
    203        #region Datatable转换为Json
    204        /// <summary> 
    205        /// Datatable转换为Json 
    206        /// </summary> 
    207        /// <param name="table">Datatable对象</param> 
    208        /// <returns>Json字符串</returns> 
    209        public static string ToJson(DataTable dt)
    210        {
    211            StringBuilder jsonString = new StringBuilder();
    212            jsonString.Append("[");
    213            DataRowCollection drc = dt.Rows;
    214            for (int i = 0; i < drc.Count; i++)
    215            {
    216                jsonString.Append("{");
    217                for (int j = 0; j < dt.Columns.Count; j++)
    218                {
    219                    string strKey = dt.Columns[j].ColumnName;
    220                    string strValue = drc[i][j].ToString();
    221                    Type type = dt.Columns[j].DataType;
    222                    jsonString.Append(""" + strKey + "":");
    223                    strValue = StringFormat(strValue, type);
    224                    if (j < dt.Columns.Count - 1)
    225                    {
    226                        jsonString.Append(strValue + ",");
    227                    }
    228                    else
    229                    {
    230                        jsonString.Append(strValue);
    231                    }
    232                }
    233                jsonString.Append("},");
    234            }
    235            jsonString.Remove(jsonString.Length - 1, 1);
    236            jsonString.Append("]");
    237            return jsonString.ToString();
    238        }
    239  
    240        /// <summary>
    241        /// DataTable转换为Json 
    242        /// </summary>
    243        public static string ToJson(DataTable dt, string jsonName)
    244        {
    245            StringBuilder Json = new StringBuilder();
    246            if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName;
    247            Json.Append("{"" + jsonName + "":[");
    248            if (dt.Rows.Count > 0)
    249            {
    250                for (int i = 0; i < dt.Rows.Count; i++)
    251                {
    252                    Json.Append("{");
    253                    for (int j = 0; j < dt.Columns.Count; j++)
    254                    {
    255                        Type type = dt.Rows[i][j].GetType();
    256                        Json.Append(""" + dt.Columns[j].ColumnName.ToString() + "":" + StringFormat(dt.Rows[i][j].ToString(), type));
    257                        if (j < dt.Columns.Count - 1)
    258                        {
    259                            Json.Append(",");
    260                        }
    261                    }
    262                    Json.Append("}");
    263                    if (i < dt.Rows.Count - 1)
    264                    {
    265                        Json.Append(",");
    266                    }
    267                }
    268            }
    269            Json.Append("]}");
    270            return Json.ToString();
    271        }
    272        #endregion
    273  
    274        #region DataReader转换为Json
    275        /// <summary> 
    276        /// DataReader转换为Json 
    277        /// </summary> 
    278        /// <param name="dataReader">DataReader对象</param> 
    279        /// <returns>Json字符串</returns> 
    280        public static string ToJson(DbDataReader dataReader)
    281        {
    282            StringBuilder jsonString = new StringBuilder();
    283            jsonString.Append("[");
    284            while (dataReader.Read())
    285            {
    286                jsonString.Append("{");
    287                for (int i = 0; i < dataReader.FieldCount; i++)
    288                {
    289                    Type type = dataReader.GetFieldType(i);
    290                    string strKey = dataReader.GetName(i);
    291                    string strValue = dataReader[i].ToString();
    292                    jsonString.Append(""" + strKey + "":");
    293                    strValue = StringFormat(strValue, type);
    294                    if (i < dataReader.FieldCount - 1)
    295                    {
    296                        jsonString.Append(strValue + ",");
    297                    }
    298                    else
    299                    {
    300                        jsonString.Append(strValue);
    301                    }
    302                }
    303                jsonString.Append("},");
    304            }
    305            dataReader.Close();
    306            jsonString.Remove(jsonString.Length - 1, 1);
    307            jsonString.Append("]");
    308            return jsonString.ToString();
    309        }
    310        #endregion
    311    }
  • 相关阅读:
    如何基于 String 实现同步锁?
    Web前端开发必不可少的9个开源框架
    Java知识,面试总会问到虚拟机,虚拟机类加载机制你懂吗?
    带你了解Java的序列化与反序列化
    想自己写框架?不了解Java注解机制可不行
    深度解密:Java与线程的关系
    手把手教你分析Mysql死锁问题
    windows server 2012 安装 DockerToolbox
    .NET CORE MVC  返回 JSON 数据
    .net core ajax提交Controller接收不到的问题处理方法
  • 原文地址:https://www.cnblogs.com/yishilin/p/6844147.html
Copyright © 2011-2022 走看看