这个C#封装类可以用于将各种格式的数据转换成JSON格式,包括List转换成Json,普通集合转换Json ,DataSet转换为Json ,Datatable转换为Json ,DataReader转换为Json等,如果你需要将对象转换成JSON,可以使用这个类。
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Reflection; using System.Collections; using System.Data.Common; namespace DotNet.Utilities { //JSON转换类 public class ConvertJson { #region
私有方法 ///
<summary> ///
过滤特殊字符 ///
</summary> 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> 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(); } else if (type
!= typeof ( string )
&& string .IsNullOrEmpty(str)) { str
= "\"" +
str + "\"" ; } return str; } #endregion #region
List转换成Json ///
<summary> ///
List转换成Json ///
</summary> public static string ListToJson<T>(IList<T>
list) { object obj
= list[0]; return ListToJson<T>(list,
obj.GetType().Name); } ///
<summary> ///
List转换成Json ///
</summary> 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(); } #endregion #region
对象转换为Json ///
<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
+ "}" ; } #endregion #region
对象集合转换Json ///
<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
+ "]" ; } #endregion #region
普通集合转换Json ///
<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
+ "]" ; } #endregion #region
DataSet转换为Json ///
<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
+ "}" ; } #endregion #region
Datatable转换为Json ///
<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 + "\":" ); 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> public static 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(); } #endregion #region
DataReader转换为Json ///
<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(); } #endregion } } |