泛型集合、datatable常用数据类型转换Json帮助类
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.
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.
相关文章
- Google Earth Engine(GEE)——计算两个影像集合间的相关性(MODIS中蒸散发数据和降水数据相关性)内涵统一两个影像之间的重分类和重投影以及影像的联合功能。
- Google Earth Engine(GEE)——提取点的栅格值(点集合导入和领域统计案例)part2
- Google Earth Engine——NOAA气候数据记录(CDR)的气溶胶光学厚度(AOT)是全球每日0.1度的衍生数据的集合,气溶胶产品是由AVHRR图像在白天海洋上空无云条件下生成的。
- MATLAB中深度学习的数据集合
- Paddle中的数据集合定义与加载
- Redis开发运维实践数据操作有序集合操作
- Java集合框架中底层文档的List与Set
- Java面试集合(三)
- 【Analytics Kit】【FAQ】集成华为分析服务问题集合 SDK初始化失败/应用调试界面没有数据/常见错误提示
- JDK集合源码之HashMap解析(上)
- 中国历代户籍、人口、垦田总数表 数据集合(制作中)
- EF获取当天的数据集合
- C#中遍历各类数据集合的方法总结
- 【Unity3D数据集合】(七)排序列表SortedList和排序字典SortedDictionary学习
- 一文整理总结常见Java面试题系列——Java集合篇(2022最新版)
- 【Analytics Kit】【FAQ】集成华为分析服务问题集合 SDK初始化失败/应用调试界面没有数据/常见错误提示
- Python-03:数据容器(列表、元组、字符串、集合、字典)
- C# 合并两个不同类型集合数据
- Mybatis Collection查询集合只出现一条数据
- 算法2.1 假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员),现要求一个新的集合A=AUB。这就要求对线性表作如下操作:扩大线性表LA。。。
- Java集合:浅谈LinkedList