zl程序教程

您现在的位置是:首页 >  后端

当前栏目

泛型集合、datatable常用数据类型转换Json帮助类

集合数据泛型JSONJSON 常用 帮助 类型转换
2023-09-27 14:28:17 时间
/// 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 = 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(); /// 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) 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 + "}"; /// 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 + "]"; /// 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 + "\":"); if (type.Name == "Int32") if (strValue.ToInt(0) == 0) strValue = "0"; else strValue = StringFormat(strValue, type); else strValue = StringFormat(strValue, type);
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(); // 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(); /// 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 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 \b: sb.Append("\\b"); break; case \f: sb.Append("\\f"); break; case \n: sb.Append("\\n"); break; case \r: sb.Append("\\r"); break; case \t: sb.Append("\\t"); 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)) str = String2Json(str); str = "\"" + str + "\""; else if (type == typeof(DateTime)) str = "\"" + str + "\""; else if (type == typeof(bool)) str = str.ToLower(); return str;
Json反序列化与Java泛型 Java的JSON库有很多,本文分析google的Gson和alibaba的fastjson,在Java泛型场景反序列化的一些有意思的行为。考虑下面的json字符串: 2147483648 , 2147483647 用fastjson在不指定类型的情况下解析,下面的代码输出啥: JSON.