C# 对象数据转换Json帮助类 JsonHelp
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;
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;
相关文章
- C#-Web服务器
- C#中 ThreadStart和ParameterizedThreadStart区别
- )C# Enum,Int,String的互相转换 枚举转换
- Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。
- Word控件Spire.Doc 转换教程(二十九):在 C# 中将 Word 转换为 PDF 时将单词标题保留为 PDF 书签
- Word控件Spire.Doc 转换教程(三十):C#、VB.NET 在 Azure 应用程序中将 Word 转换为 PDF
- Word处理控件Aspose.Words功能演示:在 C# .NET 中将 DOC/DOCX 转换为 PNG
- Word处理控件Aspose.Words功能演示:使用 C# 将 Word 转换为 HTML
- C#GDI画圆及填充
- C#程序集系列11,全局程序集缓存
- 使用C#读写结构化的二进制文件
- C#字节数组与字符串转换
- C#实现UTC时间与Datetime转换
- C# unix时间戳转换
- C# String和StringBuilder简介
- C# 面向对象(封装 — 属性)
- 堆排序 -- C#代码实现
- c#组件和控件的区别-OK
- C# new()约束简单介绍
- 【C#】时间日期格式转换:long和DateTime相互转换
- C# Excel转换为Json