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 '\b':
 23                        sb.Append("\\b"); break;
 24                    case '\f':
 25                        sb.Append("\\f"); break;
 26                    case '\n':
 27                        sb.Append("\\n"); break;
 28                    case '\r':
 29                        sb.Append("\\r"); break;
 30                    case '\t':
 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    }

 

posted on 2017-05-12 09:57  梦林``ysl  阅读(203)  评论(0编辑  收藏  举报

导航