目前为止用过的最好的Json互转工具类ConvertJson

时间:2021-05-31 15:41:12
  1 /// <summary>
2 ///ConvertJson 的摘要说明
3 /// </summary>
4 public class ConvertJson
5 {
6 #region 私有方法
7 /// <summary>
8 /// 过滤特殊字符
9 /// </summary>
10 /// <param name="s">字符串</param>
11 /// <returns>json字符串</returns>
12 private static string String2Json(String s)
13 {
14 StringBuilder sb = new StringBuilder();
15 for (int i = 0; i < s.Length; i++)
16 {
17 char c = s.ToCharArray()[i];
18 switch (c)
19 {
20 case '\"':
21 sb.Append("\\\""); break;
22 case '\\':
23 sb.Append("\\\\"); break;
24 case '/':
25 sb.Append("\\/"); break;
26 case '\b':
27 sb.Append("\\b"); break;
28 case '\f':
29 sb.Append("\\f"); break;
30 case '\n':
31 sb.Append("\\n"); break;
32 case '\r':
33 sb.Append("\\r"); break;
34 case '\t':
35 sb.Append("\\t"); break;
36 default:
37 sb.Append(c); break;
38 }
39 }
40 return sb.ToString();
41 }
42 /// <summary>
43 /// 格式化字符型、日期型、布尔型
44 /// </summary>
45 /// <param name="str"></param>
46 /// <param name="type"></param>
47 /// <returns></returns>
48 private static string StringFormat(string str, Type type)
49 {
50 if (type == typeof(string))
51 {
52 str = String2Json(str);
53 str = "\"" + str + "\"";
54 }
55 else if (type == typeof(DateTime))
56 {
57 str = "\"" + str + "\"";
58 }
59 else if (type == typeof(bool))
60 {
61 if (str != "")
62 {
63 str = str.ToLower();
64 }
65 else
66 {
67 str = "\"" + str + "\"";
68 }
69 }
70 else if (type != typeof(string) && string.IsNullOrEmpty(str))
71 {
72 str = "\"" + str + "\"";
73 }
74 return str;
75 }
76
77 #endregion
78
79 #region list转换成JSON
80 /// <summary>
81 /// list转换为Json
82 /// </summary>
83 /// <typeparam name="T"></typeparam>
84 /// <param name="list"></param>
85 /// <returns></returns>
86 public static string ListToJson<T>(IList<T> list)
87 {
88 object obj = list[0];
89 return ListToJson<T>(list, obj.GetType().Name);
90 }
91 /// <summary>
92 /// list转换为json
93 /// </summary>
94 /// <typeparam name="T1"></typeparam>
95 /// <param name="list"></param>
96 /// <param name="p"></param>
97 /// <returns></returns>
98 private static string ListToJson<T>(IList<T> list, string JsonName)
99 {
100 StringBuilder Json = new StringBuilder();
101 if (string.IsNullOrEmpty(JsonName))
102 JsonName = list[0].GetType().Name;
103 Json.Append("{\"" + JsonName + "\":[");
104 if (list.Count > 0)
105 {
106 for (int i = 0; i < list.Count; i++)
107 {
108 T obj = Activator.CreateInstance<T>();
109 PropertyInfo[] pi = obj.GetType().GetProperties();
110 Json.Append("{");
111 for (int j = 0; j < pi.Length; j++)
112 {
113 Type type = pi[j].GetValue(list[i], null).GetType();
114 Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(pi[j].GetValue(list[i], null).ToString(), type));
115 if (j < pi.Length - 1)
116 {
117 Json.Append(",");
118 }
119 }
120 Json.Append("}");
121 if (i < list.Count - 1)
122 {
123 Json.Append(",");
124 }
125 }
126 }
127 Json.Append("]}");
128 return Json.ToString();
129 }
130 #endregion
131
132 #region 对象转换为Json
133 /// <summary>
134 /// 对象转换为json
135 /// </summary>
136 /// <param name="jsonObject">json对象</param>
137 /// <returns>json字符串</returns>
138 public static string ToJson(object jsonObject)
139 {
140 string jsonString = "{";
141 PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();
142 for (int i = 0; i < propertyInfo.Length; i++)
143 {
144 object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
145 string value = string.Empty;
146 if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)
147 {
148 value = "'" + objectValue.ToString() + "'";
149 }
150 else if (objectValue is string)
151 {
152 value = "'" + ToJson(objectValue.ToString()) + "'";
153 }
154 else if (objectValue is IEnumerable)
155 {
156 value = ToJson((IEnumerable)objectValue);
157 }
158 else
159 {
160 value = ToJson(objectValue.ToString());
161 }
162 jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";
163 }
164 jsonString.Remove(jsonString.Length - 1, jsonString.Length);
165 return jsonString + "}";
166 }
167
168 #endregion
169
170 #region 对象集合转换为json
171 /// <summary>
172 /// 对象集合转换为json
173 /// </summary>
174 /// <param name="array">对象集合</param>
175 /// <returns>json字符串</returns>
176 public static string ToJson(IEnumerable array)
177 {
178 string jsonString = "{";
179 foreach (object item in array)
180 {
181 jsonString += ToJson(item) + ",";
182 }
183 jsonString.Remove(jsonString.Length - 1, jsonString.Length);
184 return jsonString + "]";
185 }
186 #endregion
187
188 #region 普通集合转换Json
189 /// <summary>
190 /// 普通集合转换Json
191 /// </summary>
192 /// <param name="array">集合对象</param>
193 /// <returns>Json字符串</returns>
194 public static string ToArrayString(IEnumerable array)
195 {
196 string jsonString = "[";
197 foreach (object item in array)
198 {
199 jsonString = ToJson(item.ToString()) + ",";
200 }
201 jsonString.Remove(jsonString.Length - 1, jsonString.Length);
202 return jsonString + "]";
203 }
204 #endregion
205
206 #region DataSet转换为Json
207 /// <summary>
208 /// DataSet转换为Json
209 /// </summary>
210 /// <param name="dataSet">DataSet对象</param>
211 /// <returns>Json字符串</returns>
212 public static string ToJson(DataSet dataSet)
213 {
214 string jsonString = "{";
215 foreach (DataTable table in dataSet.Tables)
216 {
217 jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ",";
218 }
219 jsonString = jsonString.TrimEnd(',');
220 return jsonString + "}";
221 }
222 #endregion
223
224 #region Datatable转换为Json
225 /// <summary>
226 /// Datatable转换为Json
227 /// </summary>
228 /// <param name="table">Datatable对象</param>
229 /// <returns>Json字符串</returns>
230 public static string ToJson(DataTable dt)
231 {
232 StringBuilder jsonString = new StringBuilder();
233 jsonString.Append("[");
234 DataRowCollection drc = dt.Rows;
235 for (int i = 0; i < drc.Count; i++)
236 {
237 jsonString.Append("{");
238 for (int j = 0; j < dt.Columns.Count; j++)
239 {
240 string strKey = dt.Columns[j].ColumnName;
241 string strValue = drc[i][j].ToString();
242 Type type = dt.Columns[j].DataType;
243 jsonString.Append("\"" + strKey + "\":");
244 strValue = StringFormat(strValue, type);
245 if (j < dt.Columns.Count - 1)
246 {
247 jsonString.Append(strValue + ",");
248 }
249 else
250 {
251 jsonString.Append(strValue);
252 }
253 }
254 jsonString.Append("},");
255 }
256 jsonString.Remove(jsonString.Length - 1, 1);
257 jsonString.Append("]");
258 return jsonString.ToString();
259 }
260 /// <summary>
261 /// DataTable转换为Json
262 /// </summary>
263 public static string ToJson(DataTable dt, string jsonName)
264 {
265 StringBuilder Json = new StringBuilder();
266 if (string.IsNullOrEmpty(jsonName))
267 jsonName = dt.TableName;
268 Json.Append("{\"" + jsonName + "\":[");
269 if (dt.Rows.Count > 0)
270 {
271 for (int i = 0; i < dt.Rows.Count; i++)
272 {
273 Json.Append("{");
274 for (int j = 0; j < dt.Columns.Count; j++)
275 {
276 Type type = dt.Rows[i][j].GetType();
277 Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j].ToString(), type));
278 if (j < dt.Columns.Count - 1)
279 {
280 Json.Append(",");
281 }
282 }
283 Json.Append("}");
284 if (i < dt.Rows.Count - 1)
285 {
286 Json.Append(",");
287 }
288 }
289 }
290 Json.Append("]}");
291 return Json.ToString();
292 }
293
294 #endregion
295
296 #region DataReader转换为Json
297 /// <summary>
298 /// DataReader转换为Json
299 /// </summary>
300 /// <param name="dataReader">DataReader对象</param>
301 /// <returns>Json字符串</returns>
302 public static string ToJson(DbDataReader dataReader)
303 {
304 StringBuilder jsonString = new StringBuilder();
305 jsonString.Append("[");
306 while (dataReader.Read())
307 {
308 jsonString.Append("{");
309 for (int i = 0; i < dataReader.FieldCount; i++)
310 {
311 Type type = dataReader.GetFieldType(i);
312 string strKey = dataReader.GetName(i);
313 string strValue = dataReader[i].ToString();
314 jsonString.Append("\"" + strKey + "\":");
315 strValue = StringFormat(strValue, type);
316 if (i < dataReader.FieldCount - 1)
317 {
318 jsonString.Append(strValue + ",");
319 }
320 else
321 {
322 jsonString.Append(strValue);
323 }
324 }
325 jsonString.Append("},");
326 }
327 dataReader.Close();
328 jsonString.Remove(jsonString.Length - 1, 1);
329 jsonString.Append("]");
330 return jsonString.ToString();
331 }
332 #endregion
333 }