C#.NET下转换泛型列表为JSON格式
2023-09-14 08:57:59 时间
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 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 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 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 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 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 + "\":");
strValue = StringFormat(strValue, type);
if (j dt.Columns.Count - 1)
jsonString.Append(strValue + ",");
else
jsonString.Append(strValue);
jsonString.Append("},");
jsonString.Remove(jsonString.Length - 1, 1);
jsonString.Append("]");
return jsonString.ToString();
/// summary
/// DataTable转成Json
/// /summary
/// param name="jsonName" /param
/// param name="dt" /param
/// returns /returns
public string ToJson(DataTable dt, string jsonName)
StringBuilder Json = new StringBuilder();
if (string.IsNullOrEmpty(jsonName))
jsonName = dt.TableName;
Json.Append("{\"" + jsonName + "\":[");
if (dt.Rows.Count 0)
for (int i = 0; i dt.Rows.Count; i++)
Json.Append("{");
for (int j = 0; j dt.Columns.Count; j++)
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 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 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
public 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
public 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.
.NET读取json数据并绑定到对象 原文:.NET读取json数据并绑定到对象 需要引用的命名空间: 读取的具体应用: this代表本实体(对象),通过PopulateObject,直接将读取到的json数据与对象进行绑定 Json保存的具体应用: 将对象保存为Json JOb...
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
Json反序列化与Java泛型 Java的JSON库有很多,本文分析google的Gson和alibaba的fastjson,在Java泛型场景反序列化的一些有意思的行为。考虑下面的json字符串: 2147483648 , 2147483647 用fastjson在不指定类型的情况下解析,下面的代码输出啥: JSON.
.NET读取json数据并绑定到对象 原文:.NET读取json数据并绑定到对象 需要引用的命名空间: 读取的具体应用: this代表本实体(对象),通过PopulateObject,直接将读取到的json数据与对象进行绑定 Json保存的具体应用: 将对象保存为Json JOb...
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
相关文章
- 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
- 【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式
- C#数据Encrypt加密Encrypt解密的算法使用
- C# System.Net.Mail.MailMessage 发邮件
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)3---- 动态加载Assembly应用程序
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域
- C# .NET Framework4.0环境下使用async/await语法,以及其中的需要注意的地方。
- C#签名算法HS256和RS256实战演练
- C#.NET常见问题(FAQ)-命名空间namespace如何理解
- C#.NET常见问题(FAQ)-如何使用变量动态添加控件
- C#.NET常见问题(FAQ)-如何修改代码字体
- C#应用视频教程3.4 Halcon+C#测试
- .Net(c#)加密解密工具类:
- C# this.invoke()作用 多线程操作UI
- C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
- Atitit.java c#这类编程语言的设计失败点attilax总结
- Atitit. 数据约束 校验 原理理论与 架构设计 理念模式java php c#.net js javascript mysql oracle
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- Atitit,通过pid获取进程文件路径 java php c#.net版本大总结
- C#中使用Oracle存储过程返回结果集
- (五十八)c#Winform自定义控件-管道阀门(工业)-HZHControls
- C#设计模式学习笔记:设计原则
- WinFrom、C# 学习记录一