將查詢出來的數據集轉化成JSON格式的C#類

jopen 11年前發布 | 42K 次閱讀 JSON .NET開發

 using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;

namespace WikEasyUIDemo { /// <summary> /// JSON幫助類 /// </summary> public class JsonHelper { /// <summary> /// 生成表單編輯賦值 JSON格式 /// </summary> /// <param name="dt"></param> /// <param name="displayCount"></param> /// <returns></returns> public static string CreateJsonOne(DataTable dt, bool displayCount) { StringBuilder JsonString = new StringBuilder(); //Exception Handling
if (dt != null && dt.Rows.Count > 0) {

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                JsonString.Append("{ ");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    if (j < dt.Columns.Count - 1)
                    {
                        JsonString.Append("ipt_" + dt.Columns[j].ColumnName.ToString().ToLower() + ":" + "\"" + dt.Rows[i][j].ToString() + "\",");
                    }
                    else if (j == dt.Columns.Count - 1)
                    {
                        JsonString.Append("ipt_" + dt.Columns[j].ColumnName.ToString().ToLower() + ":" + "\"" + dt.Rows[i][j].ToString() + "\"");
                    }
                }

                if (i == dt.Rows.Count - 1)
                {
                    JsonString.Append("} ");
                }
                else
                {
                    JsonString.Append("}, ");
                }
            }

            return JsonString.ToString();
        }
        else
        {
            return null;
        }

    }


    /// <summary>
    /// 將DataTable中的數據轉換成JSON格式
    /// </summary>
    /// <param name="dt">數據源DataTable</param>
    /// <param name="displayCount">是否輸出數據總條數</param>
    /// <returns></returns>
    public static string CreateJsonParameters(DataTable dt, bool displayCount)
    {
        return CreateJsonParameters(dt, displayCount, dt.Rows.Count);
    }
    /// <summary>
    /// 將DataTable中的數據轉換成JSON格式
    /// </summary>
    /// <param name="dt">數據源DataTable</param>
    /// <returns></returns>
    public static string CreateJsonParameters(DataTable dt)
    {
        return CreateJsonParameters(dt, true);
    }
    /// <summary>
    /// 將DataTable中的數據轉換成JSON格式
    /// </summary>
    /// <param name="dt">數據源DataTable</param>
    /// <param name="displayCount">是否輸出數據總條數</param>
    /// <param name="totalcount">JSON中顯示的數據總條數</param>
    /// <returns></returns>
    public static string CreateJsonParameters(DataTable dt, bool displayCount, int totalcount)
    {
        StringBuilder JsonString = new StringBuilder();
        //Exception Handling       

        if (dt != null)
        {
            JsonString.Append("{ ");
            JsonString.Append("\"rows\":[ ");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                JsonString.Append("{ ");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    if (j < dt.Columns.Count - 1)
                    {
                        //if (dt.Rows[i][j] == DBNull.Value) continue;
                        if (dt.Columns[j].DataType == typeof(bool))
                        {
                            JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" +
                                              dt.Rows[i][j].ToString().ToLower() + ",");
                        }
                        else if (dt.Columns[j].DataType == typeof(string))
                        {
                            JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" +
                                              dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\",");
                        }
                        else
                        {
                            JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" + dt.Rows[i][j] + "\",");
                        }
                    }
                    else if (j == dt.Columns.Count - 1)
                    {
                        //if (dt.Rows[i][j] == DBNull.Value) continue;
                        if (dt.Columns[j].DataType == typeof(bool))
                        {
                            JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" +
                                              dt.Rows[i][j].ToString().ToLower());
                        }
                        else if (dt.Columns[j].DataType == typeof(string))
                        {
                            JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" +
                                              dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\"");
                        }
                        else
                        {
                            JsonString.Append("\"JSON_" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" + dt.Rows[i][j] + "\"");
                        }
                    }
                }
                /*end Of String*/
                if (i == dt.Rows.Count - 1)
                {
                    JsonString.Append("} ");
                }
                else
                {
                    JsonString.Append("}, ");
                }
            }
            JsonString.Append("]");

            if (displayCount)
            {
                JsonString.Append(",");

                JsonString.Append("\"total\":");
                JsonString.Append(totalcount);
            }

            JsonString.Append("}");
            return JsonString.ToString().Replace("\n", "");
        }
        else
        {
            return null;
        }
    }

    #region object 2 json

    private static void WriteDataRow(StringBuilder sb, DataRow row)
    {
        sb.Append("{");
        foreach (DataColumn column in row.Table.Columns)
        {
            sb.AppendFormat("\"{0}\":", column.ColumnName);
            WriteValue(sb, row[column]);
            sb.Append(",");
        }
        // Remove the trailing comma.
        if (row.Table.Columns.Count > 0)
        {
            --sb.Length;
        }
        sb.Append("}");
    }

    private static void WriteDataSet(StringBuilder sb, DataSet ds)
    {
        sb.Append("{\"Tables\":{");
        foreach (DataTable table in ds.Tables)
        {
            sb.AppendFormat("\"{0}\":", table.TableName);
            WriteDataTable(sb, table);
            sb.Append(",");
        }
        // Remove the trailing comma.
        if (ds.Tables.Count > 0)
        {
            --sb.Length;
        }
        sb.Append("}}");
    }

    private static void WriteDataTable(StringBuilder sb, DataTable table)
    {
        sb.Append("{\"Rows\":[");
        foreach (DataRow row in table.Rows)
        {
            WriteDataRow(sb, row);
            sb.Append(",");
        }
        // Remove the trailing comma.
        if (table.Rows.Count > 0)
        {
            --sb.Length;
        }
        sb.Append("]}");
    }

    private static void WriteEnumerable(StringBuilder sb, IEnumerable e)
    {
        bool hasItems = false;
        sb.Append("[");
        foreach (object val in e)
        {
            WriteValue(sb, val);
            sb.Append(",");
            hasItems = true;
        }
        // Remove the trailing comma.
        if (hasItems)
        {
            --sb.Length;
        }
        sb.Append("]");
    }

    private static void WriteHashtable(StringBuilder sb, IDictionary e)
    {
        bool hasItems = false;
        sb.Append("{");
        foreach (string key in e.Keys)
        {
            sb.AppendFormat("\"{0}\":", key.ToLower());
            WriteValue(sb, e[key]);
            sb.Append(",");
            hasItems = true;
        }
        // Remove the trailing comma.
        if (hasItems)
        {
            --sb.Length;
        }
        sb.Append("}");
    }

    private static void WriteObject(StringBuilder sb, object o)
    {
        MemberInfo[] members = o.GetType().GetMembers(BindingFlags.Instance | BindingFlags.Public);
        sb.Append("{");
        bool hasMembers = false;
        foreach (MemberInfo member in members)
        {
            bool hasValue = false;
            object val = null;
            if ((member.MemberType & MemberTypes.Field) == MemberTypes.Field)
            {
                FieldInfo field = (FieldInfo)member;
                val = field.GetValue(o);
                hasValue = true;
            }
            else if ((member.MemberType & MemberTypes.Property) == MemberTypes.Property)
            {
                PropertyInfo property = (PropertyInfo)member;
                if (property.CanRead && property.GetIndexParameters().Length == 0)
                {
                    val = property.GetValue(o, null);
                    hasValue = true;
                }
            }
            if (hasValue)
            {
                sb.Append("\"");
                sb.Append(member.Name);
                sb.Append("\":");
                WriteValue(sb, val);
                sb.Append(",");
                hasMembers = true;
            }
        }
        if (hasMembers)
        {
            --sb.Length;
        }
        sb.Append("}");
    }

    private static void WriteString(StringBuilder sb, IEnumerable s)
    {
        sb.Append("\"");
        foreach (char c in s)
        {
            switch (c)
            {
                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:
                    int i = c;
                    if (i < 32 || i > 127)
                    {
                        sb.AppendFormat("\\u{0:X04}", i);
                    }
                    else
                    {
                        sb.Append(c);
                    }
                    break;
            }
        }
        sb.Append("\"");
    }

    public static void WriteValue(StringBuilder sb, object val)
    {
        if (val == null || val == DBNull.Value)
        {
            sb.Append("null");
        }
        else if (val is string || val is Guid)
        {
            WriteString(sb, val.ToString());
        }
        else if (val is bool)
        {
            sb.Append(val.ToString().ToLower());
        }
        else if (val is double ||
                 val is float ||
                 val is long ||
                 val is int ||
                 val is short ||
                 val is byte ||
                 val is decimal)
        {
            sb.AppendFormat(CultureInfo.InvariantCulture.NumberFormat, "{0}", val);
        }
        else if (val.GetType().IsEnum)
        {
            sb.Append((int)val);
        }
        else if (val is DateTime)
        {
            sb.Append("new Date(\"");
            sb.Append(((DateTime)val).ToString("MMMM, d yyyy HH:mm:ss",
                                                new CultureInfo("en-US", false).DateTimeFormat));
            sb.Append("\")");
        }
        else if (val is DataSet)
        {
            WriteDataSet(sb, val as DataSet);
        }
        else if (val is DataTable)
        {
            WriteDataTable(sb, val as DataTable);
        }
        else if (val is DataRow)
        {
            WriteDataRow(sb, val as DataRow);
        }
        else if (val is Hashtable)
        {
            WriteHashtable(sb, val as Hashtable);
        }
        else if (val is IEnumerable)
        {
            WriteEnumerable(sb, val as IEnumerable);
        }
        else
        {
            WriteObject(sb, val);
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="o"></param>
    /// <returns></returns>
    public static string Convert2Json(object o)
    {
        StringBuilder sb = new StringBuilder();
        WriteValue(sb, o);
        return sb.ToString();
    }

    #endregion
}

}

查詢最終結果:

{ "rows":[ { "JSON_id":"2","JSON_cardnumber":"5353435","JSON_username":"xixi","JSON_sex":"","JSON_tel":"4535345","JSON_address":"","JSON_jifen":"50","JSON_time":"2013-7-16 8:50:37","JSON_showhouse":"","JSON_remark":""} ],"total":1}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!