分享一个C#通用的json操作类

json操作类,支持json格式的字符串常用操作,对象序列化为json字符串、json字符串转换为对象,DataTable转换为json字符串。支持将实体类转换成DataTable 。

源码如下:

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.Script.Serialization;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Reflection;
using System.IO;

/// 
///JsonTableHelper 的摘要说明
/// 

public static class JsonTableHelper
{
    ///  
    /// 返回对象序列化 
    ///  
    /// 源对象 
    /// json数据 
    public static string ToJson(this object obj)
    {
        JavaScriptSerializer serialize = new JavaScriptSerializer();
        return serialize.Serialize(obj);
    }

    ///  
    /// 控制深度 
    ///  
    /// 源对象 
    /// 深度 
    /// json数据 
    public static string ToJson(this object obj, int recursionDepth)
    {
        JavaScriptSerializer serialize = new JavaScriptSerializer();
        serialize.RecursionLimit = recursionDepth;
        return serialize.Serialize(obj);
    }

    ///  
    /// DataTable转为json 
    ///  
    /// DataTable 
    /// json数据 
    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();
    }




    ///     
    /// 格式化字符型、日期型、布尔型    
    ///     
    ///     
    ///     
    ///     
    private static string StringFormat(string str, Type type)
    {
        if (str== null || str == string.Empty)
            str = "\"\"";
        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;
    }
    ///  
    /// DataTable转为json,不带索引 
    ///  
    /// DataTable 
    /// json数据 
    public static string ToJsonTotal(DataTable dt,int count)
    {
       
        StringBuilder sb = new StringBuilder();
        sb.Append("{\"total\":"+count+",\"rows\":");
        sb.Append(ToJsonp(dt));
        sb.Append("}");
        return sb.ToString();
    }
    ///     
    /// 过滤特殊字符    
    ///     
    ///     
    ///     
    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();
    }
    ///  
    /// DataTable转为json 
    ///  
    /// DataTable 
    /// json数据 
    public static string ToJsonDrv(DataTable dt)
    {
        Dictionary dic = new Dictionary();

        int index = 0;
        foreach (DataRowView drv in dt.DefaultView)
        {
            Dictionary result = new Dictionary();

            foreach (DataColumn dc in dt.Columns)
            {
                result.Add(dc.ColumnName, drv[dc.ColumnName].ToString());
            }
            dic.Add(index.ToString(), result);
            index++;
        }
        return ToJson(dic);
    }
    ///  
    /// DataTable转为jsonp,autocomplete插件需要使用的jsonp格式 
    ///  
    /// DataTable 
    /// jsonp数据 
    public static string ToJsonp(DataTable dtResult)
    {
        if (dtResult == null)
        {
            return "";
        }

        StringBuilder jsonString = new StringBuilder();

        string temp = "";
        string value = "";
        jsonString.Append("[");

        foreach (DataRow dr in dtResult.Rows)
        {
            temp = "";

            jsonString.Append("{");

            foreach (DataColumn dc in dtResult.Columns)
            {
                value = dr[dc].ToString();

                //if (value.Length < 1)
                //{
                //    value = " ";
                //}

                temp += "\"" + dc.ColumnName + "\":\"" + value + "\",";
            }

            temp = temp.TrimEnd(',');

            jsonString.Append(temp + "},");
        }

        temp = jsonString.ToString();
        temp = temp.TrimEnd(',');
        temp += "]";

        return temp;
    }

    ///  
    /// 将实体类转换成DataTable 
    ///  
    ///  
    ///  
    ///  
    public static DataTable ToDataTable(IList objlist)
    {
        if (objlist == null || objlist.Count <= 0)
        {
            return null;
        }
        DataTable dt = new DataTable(typeof(T).Name);
        DataColumn column;
        DataRow row;

        System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (T t in objlist)
        {
            if (t == null)
            {
                continue;
            }

            row = dt.NewRow();

            for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
            {
                System.Reflection.PropertyInfo pi = myPropertyInfo[i];

                string name = pi.Name;

                if (dt.Columns[name] == null)
                {
                    column = new DataColumn(name, pi.PropertyType);
                    dt.Columns.Add(column);
                }

                row[name] = pi.GetValue(t, null);
            }

            dt.Rows.Add(row);
        }
        return dt;
    }

    public static string Obj2Base64String(object serializableObject)
    {
        string returnedData;
        if (serializableObject == null)
            returnedData = String.Empty;
        else
        {
            byte[] resultBytes = null;
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter
                     = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            MemoryStream stream = new MemoryStream();
            formatter.Serialize(stream, serializableObject);
            resultBytes = stream.ToArray();
            stream.Close();
            returnedData = Convert.ToBase64String(resultBytes);
        }
        return returnedData;
    }

    ///    
   /// Deserializes base64 string to object.返序列化string 为 object    
   ///     
    public static object Base64String2Obj(string deserializedString)
    {
        object returnedData;
        if (deserializedString == String.Empty)
            returnedData = null;
        else
        {
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter
                   = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            MemoryStream stream = new MemoryStream();
            byte[] middata = Convert.FromBase64String(deserializedString);
            stream.Write(middata, 0, middata.Length);
            //Pay attention to the following line. don't forget this line.    
            stream.Seek(0, SeekOrigin.Begin);
            returnedData = formatter.Deserialize(stream);
            stream.Close();
        }
        return returnedData;
    }
    /// 
    /// Json 字符串 转换为 DataTable数据集合
    /// 
    /// 
    /// 
    public static DataTable ToDataTable(this string json)
    {
        DataTable dataTable = new DataTable();  //实例化
        DataTable result;
        try
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
            ArrayList arrayList = javaScriptSerializer.Deserialize(json);
            if (arrayList.Count > 0)
            {
                foreach (Dictionary dictionary in arrayList)
                {
                    if (dictionary.Keys.Count() == 0)
                    {
                        result = dataTable;
                        return result;
                    }
                    if (dataTable.Columns.Count == 0)
                    {
                        foreach (string current in dictionary.Keys)
                        {
                            dataTable.Columns.Add(current, dictionary[current].GetType());
                        }
                    }
                    DataRow dataRow = dataTable.NewRow();
                    foreach (string current in dictionary.Keys)
                    {
                        dataRow[current] = dictionary[current];
                    }

                    dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
                }
            }
        }
        catch
        {
        }
        result = dataTable;
        return result;
    }
}


using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Script.Serialization;
using System.Data;
namespace cn.EginSoft.Core.Commons
{
    ///  
    /// JSON帮助类 
    ///  
    public class JsonHelper
    {
        ///  
        /// 对象转JSON 
        ///  
        /// 对象 
        /// JSON格式的字符串 
        public static string ObjectToJSON(object obj)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                return jss.Serialize(obj);
            }
            catch (Exception ex)
            {
                throw new Exception("JSONHelper.ObjectToJSON(): " + ex.Message);
            }
        }
        ///  
        /// 数据表转键值对集合 
        /// 把DataTable转成 List集合, 存每一行 
        /// 集合中放的是键值对字典,存每一列 
        ///  
        /// 数据表 
        /// 哈希表数组 
        public static List> DataTableToList(DataTable dt)
        {
            List> list
            = new List>();
            foreach (DataRow dr in dt.Rows)
            {
                Dictionary dic = new Dictionary();
                foreach (DataColumn dc in dt.Columns)
                {
                    dic.Add(dc.ColumnName, dr[dc.ColumnName]);
                }
                list.Add(dic);
            }
            return list;
        }
        ///  
        /// 数据集转键值对数组字典 
        ///  
        /// 数据集 
        /// 键值对数组字典 
        public static Dictionary>> DataSetToDic(DataSet ds)
        {
            Dictionary>> result = new Dictionary>>();
            foreach (DataTable dt in ds.Tables)
                result.Add(dt.TableName, DataTableToList(dt));
            return result;
        }
        ///  
        /// 数据表转JSON 
        ///  
        /// 数据表 
        /// JSON字符串 
        public static string DataTableToJSON(DataTable dt)
        {
            return ObjectToJSON(DataTableToList(dt));
        }
        ///  
        /// JSON文本转对象,泛型方法 
        ///  
        /// 类型 
        /// JSON文本 
        /// 指定类型的对象 
        public static T JSONToObject(string jsonText)
        {
            JavaScriptSerializer jss = new JavaScriptSerializer();
            try
            {
                return jss.Deserialize(jsonText);
            }
            catch (Exception ex)
            {
                throw new Exception("JSONHelper.JSONToObject(): " + ex.Message);
            }
        }
        ///  
        /// 将JSON文本转换为数据表数据 
        ///  
        /// JSON文本 
        /// 数据表字典 
        public static Dictionary>> TablesDataFromJSON(string jsonText)
        {
            return JSONToObject>>>(jsonText);
        }
        ///  
        /// 将JSON文本转换成数据行 
        ///  
        /// JSON文本 
        /// 数据行的字典 
        public static Dictionary DataRowFromJSON(string jsonText)
        {
            return JSONToObject>(jsonText);
        }
    }
}


你可能感兴趣的:(51编程论坛)