开发者社区> 社会主义> 正文

C#.NET下转换泛型列表为JSON格式

简介:
+关注继续查看

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Collections;
using System.Reflection;
 
namespace LearningAspNet.JSON示例
{
    public class jsonCovert
    {
        /// <summary>
/// List转成json 
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonName"></param>
/// <param name="list"></param>
/// <returns></returns>
public  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  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;
}
 
  
 
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
15. Html5的局:WebGL的纹理格式的转换
#紧接上文 WebKit为了统一WebGL的书写规范,对OpenGL的标准进行四书五入,推出了平台无关的API标准,同时为了简化底层硬件的差异,又新增了一些纹理格式的支持,由内核提供高性能的图像转换,扩展了OpenGL得标准。 那么,WebGL在底层做了些什么呢?复杂吗?可以自己实现吗? #纹理格式转换计算量大 这是WebGL为前端同学提供的福利,上层开发可以更加专注业务书写,充分挖掘
3569 0
C++中int 转换成 string类型
要是换在C#或Java,各种数据类型随便转换,有各种函数随便挑。但是在C++中还真没有那么简单。 我本来是希望能够将123,这样的int类型转换的“123”这样的string,或者C-style也可以。
1021 0
0012 大小写转换 c语言
0012 大小写转换 c语言
67 0
利用MaxCompute内建函数及UDTF转换json格式日志数据
本文介绍了如何使用MaxCompute UDF对JSON格式的日志进行信息提取和转换。
8779 0
Css规范整理:3.3、常规流布局:行内格式化上下文
行内级盒:参与行内格式化上下文的盒(outer = inner ) 行内盒:display = inline 的不可替换元素。 原子行内级盒:不属于行内盒的行内级盒。 行框(line box):包含来自同一行的盒的矩形区域叫做行框。(不是一个盒,没有padding border margin)
1415 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
10027 0
+关注
社会主义
从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
237
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载