DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 闡述返回JSON數據的使用說明介紹
闡述返回JSON數據的使用說明介紹
編輯:XML詳解     

因項目需要,在苦痛掙扎了一天後,做出了一個返回JSON數據。先放在網上,第一大家看下有什麼地方需要優化沒有,第二是避免其他ASP.Net程序員為網上苦苦搜索而找不到相關代碼而郁悶。

第一步:為了使服務器端查詢返回JSON數據,從網上找了個用C#寫的JSONHelper類(在此感謝那位不知名的好人),以下是JsonHelper類全部代碼。(JSonHelper.cs)

  1. using System;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. using System.Text;  
  5. using System.Web.Script.Serialization;  
  6. /// <summary> 
  7. /// JSONHelper 的摘要說明  
  8. /// </summary> 
  9. public class JSONHelper  
  10. {  
  11.     //對應JSON的singleInfo成員  
  12.     public string singleInfo = string.Empty;  
  13.     protected string _error = string.Empty;  
  14.     protected bool _success = true;  
  15.     protected long _totalCount = 0;  
  16.     protected System.Collections.ArrayList arrData = new ArrayList();  
  17.     protected System.Collections.ArrayList arrDataItem = new ArrayList();  
  18.     public JSONHelper()  
  19.     {  
  20.     }  
  21.     public static string ToJSON(object obj)  
  22.     {  
  23.         JavaScriptSerializer serializer = new JavaScriptSerializer();  
  24.         return serializer.Serialize(obj);  
  25.     }  
  26.     public static string ToJSON(object obj, int recursionDepth)  
  27.     {  
  28.         JavaScriptSerializer serializer = new JavaScriptSerializer();  
  29.         serializer.RecursionLimit = recursionDepth;  
  30.         return serializer.Serialize(obj);  
  31.     }  
  32.     //對應於JSON的success成員  
  33.     public bool success  
  34.     {  
  35.         get  
  36.         {  
  37.             return _success;  
  38.         }  
  39.         set  
  40.         {  
  41.             //如設置為true則清空error  
  42.             if (success) _error = string.Empty;  
  43.             _success = value;  
  44.         }  
  45.     }  
  46.     //對應於JSON的error成員  
  47.     public string error  
  48.     {  
  49.         get  
  50.         {  
  51.             return _error;  
  52.         }  
  53.         set  
  54.         {  
  55.             //如設置error,則自動設置success為false  
  56.             if (value != "") _success = false;  
  57.             _error = value;  
  58.         }  
  59.     }  
  60.     public long totlalCount  
  61.     {  
  62.         get { return _totalCount; }  
  63.         set { _totalCount = value; }  
  64.     }  
  65.     //重置,每次新生成一個JSon對象時必須執行該方法  
  66.     public void Reset()  
  67.     {  
  68.         _success = true;  
  69.         _error = string.Empty;  
  70.         singleInfo = string.Empty;  
  71.         arrData.Clear();  
  72.         arrDataItem.Clear();  
  73.     }  
  74.     public void AddItem(string name, string value)  
  75.     {  
  76.         arrData.Add("\"" + name + "\":" + "\"" + value + "\"");  
  77.     }  
  78.     public void ItemOk()  
  79.     {  
  80.         arrData.Add("<BR>");  
  81.     }  
  82.     //序列化JSON對象,得到返回的JSON代碼  
  83.     public override string ToString()  
  84.     {  
  85.         StringBuilder sb = new StringBuilder();  
  86.         sb.Append("{");  
  87.         sb.Append("totalCount:" + totlalCount.ToString() + ",");  
  88.         sb.Append("success:" + _success.ToString().ToLower() + ",");  
  89.         sb.Append("error:\"" + _error.Replace("\"", "\\\"") + "\",");  
  90.         sb.Append("singleInfo:\"" + singleInfo.Replace("\"", "\\\"") + "\",");  
  91.         sb.Append("data:[");  
  92.         int index = 0;  
  93.         sb.Append("{");  
  94.         if (arrData.Count <= 0)  
  95.         {  
  96.             sb.Append("}]");  
  97.         }  
  98.         else  
  99.         {  
  100.             foreach (string val in arrData)  
  101.             {  
  102.                 index++;  
  103.                 if (val != "<BR>")  
  104.                 {  
  105.                     sb.Append(val + ",");  
  106.                 }  
  107.                 else  
  108.                 {  
  109.                     sbsb = sb.Replace(",", "", sb.Length - 1, 1);  
  110.                     sb.Append("},");  
  111.                     if (index < arrData.Count)  
  112.                     {  
  113.                         sb.Append("{");  
  114.                     }  
  115.                 }  
  116.             }  
  117.             sbsb = sb.Replace(",", "", sb.Length - 1, 1);  
  118.             sb.Append("]");  
  119.         }  
  120.         sb.Append("}");  
  121.         return sb.ToString();  
  122.     }  

第二步:新建ASPX文件,做為服務器端,用返回查詢的JSON數據(PagingRequest.cs)

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.UI;  
  6. using System.Web.UI.WebControls;  
  7. using System.Data;  
  8. using System.Data.SqlClIEnt;  
  9. using System.Text;  
  10. namespace ExtJSDemo.Data  
  11. {  
  12.     public partial class PagingRequest : System.Web.UI.Page  
  13.     {  
  14.         protected void Page_Load(object sender, EventArgs e)  
  15.         {  
  16.             int start = Convert.ToInt32(Request["start"].ToString());   // ExtJS Paging 必須指定的參數(從第幾行記錄開始)/ ExtJS默認0是第一行記錄  
  17.             int limit = Convert.ToInt32(Request["limit"].ToString()); // ExtJS Paging 必須指定的參數(每頁顯示多少行記錄)  
  18.             JSONHelper JSonHelp = new JSONHelper();  
  19.             int TotalRecords = 0;   
  20.             DataSet DSet = GET_Product_Data(start, limit, out TotalRecords); // 獲取數據  
  21.             JSonHelp.success = true;  
  22.             JSonHelp.totlalCount = TotalRecords;// 記錄總數  
  23.             if (DSet != null)  
  24.             {  
  25.                 DataTable DTable = DSet.Tables[0];  
  26.                 for (int i = 0; i < DTable.Rows.Count; i++)  
  27.                 {  
  28.                     // 循環生成JSON代碼  
  29.                     JSonHelp.AddItem("Id", DTable.Rows[i]["Id"].ToString());  
  30.                     JSonHelp.AddItem("Name", DTable.Rows[i]["Name"].ToString());  
  31.                     JSonHelp.AddItem("StreetPrice", DTable.Rows[i]["StreetPrice"].ToString());  
  32.                     JSonHelp.AddItem("TypeName", DTable.Rows[i]["TypeName"].ToString());  
  33.                     JSonHelp.ItemOk();  
  34.                 }  
  35.             }  
  36.             Response.Write(jsonHelp.ToString());  // 輸出JSON代碼  
  37.         }  
  38.         /// <summary> 
  39.         /// 獲取數據  
  40.         /// </summary> 
  41.         /// <param name="PageIndex">記錄索引</param> 
  42.         /// <param name="PageSize">每頁顯示記錄數</param> 
  43.         /// <param name="TotalRecords">總記錄數</param> 
  44.         public DataSet GET_Product_Data(int start, int limit,out int TotalRecords)  
  45.         {  
  46.             SqlConnection _Connection = null;  
  47.             SqlDataAdapter _Adapter = null;  
  48.             DataSet DSet = null;  
  49.             try  
  50.             {  
  51.                 _Connection = new SqlConnection(System.Configuration.ConfigurationManager.APPSettings["SQLContionString"].ToString());  
  52.                 _Connection.Open();  
  53.                 _Adapter = new SqlDataAdapter("SELECT [Id] FROM [Product] ",_Connection);  
  54.                 DSet = new DataSet();  
  55.                 _Adapter.Fill(DSet);  
  56.                 TotalRecords = Convert.ToInt32(DSet.Tables[0].Rows.Count);      // 記錄總數  
  57.                 if (TotalRecords < 1) return null;  // 沒有記錄  
  58.                 int pageLowerBound = start+1;                                            // 從第幾條數據開始  
  59.                 int pageUpperBound = pageLowerBound + limit;             // 每頁多少條數據  
  60.                 StringBuilder sb = new StringBuilder();  
  61.                 if (TotalRecords >= pageLowerBound)  
  62.                 {  
  63.                     for (int i = pageLowerBound; i < TotalRecords && i < pageUpperBound; i++)  
  64.                     {  
  65.                         sb.AppendFormat("'{0}',", DSet.Tables[0].Rows[i-1][0].ToString());//構造ID in() 條件,取其中一頁  
  66.                     }  
  67.                 }  
  68.                 else   
  69.                     return null; // 沒有記錄  
  70.                 if (sb.Length > 1)  
  71.                     sb.Remove(sb.Length - 1, 1);//刪除最後一個逗號  
  72.                 StringBuilder strSql = new StringBuilder();  
  73.                 strSql.Append("SELECT a.[Id],a.[Name],a.[StreetPrice],b.TypeName  ");  
  74.                 strSql.Append(" FROM [Product] as a left join ProductType  as b on a.Typeid = b.Typeid ");  
  75.                 strSql.AppendFormat(" where a.[Id] in({0})", sb.ToString());  
  76.                 _Adapter = new SqlDataAdapter(strSql.ToString(), _Connection);  
  77.                 DSet = new DataSet();  
  78.                 _Adapter.Fill(DSet);  
  79.             }  
  80.             finally  
  81.             {  
  82.                 if (_Connection != null && _Connection.State == ConnectionState.Open)  
  83.                 {  
  84.                     _Connection.Close();  
  85.                 }  
  86.             }  
  87.             return DSet;  
  88.         }  
  89.     }  
  90. }  

第三步:返回JSON數據頁面用作客戶端呈現結果的載體(PagingControls.ASPx)

  1. <head id="Head1" runat="server"> 
  2.     <title></title> 
  3.         <link rel="stylesheet" type="text/CSS" href="../ext3/resources/css/ext-all.CSS" mce_href="ext3/resources/css/ext-all.CSS" /> 
  4.     <mce:script type="text/Javascript" src="../ext3/adapter/ext/ext-base.JS" mce_src="ext3/adapter/ext/ext-base.JS"></mce:script> 
  5.     <mce:script type="text/Javascript" src="../ext3/ext-all.JS" mce_src="ext3/ext-all.JS"></mce:script> 
  6.     <mce:script type="text/Javascript" src="JS/PagingGridPanel.JS" mce_src="JS/PagingGridPanel.JS"></mce:script> 
  7.         <mce:script type="text/Javascript"><!--  
  8.             Ext.BLANK_IMAGE_URL = "../ext3/resources/images/default/s.gif";  
  9.             Ext.onReady(function() {  
  10.                 Ext.QuickTips.init();  
  11.                 Ext.form.FIEld.prototype.msgTarget = "side";  
  12.                 new PagingGridPanel();      // JS文件  
  13.             });  
  14.       
  15. // --></mce:script> 

第四部:當然是寫JS腳本啦!!而且肯定使用返回JSON數據

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved