好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# JSON格式化转换辅助类 ConvertJson

可能我们用惯了 Newtonsoft.Json.dll 等第三方的类库来实现序列化等类似的操作,但是有时只是简单的用一下,感觉没必要那么费事,所谓杀鸡焉用牛刀,自制个小刀即可。

代码分享给大家,如下:

?

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Reflection;

using System.Collections;

using System.Data.Common;

 

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

}

dy("nrwz");

查看更多关于C# JSON格式化转换辅助类 ConvertJson的详细内容...

  阅读:48次