最近在開發Windows8 Metro App,使用JavaScript和HTML開發環境。所以操作數據綁定都是使用JSON格式數據。后台使用的是ASP.NET,因為項目相對較小,所有后台沒有使用數據庫,使用的XML來保存數據。前台需要請求后台返回JSON格式的數據,比如要求返回一個eventslist,后台操作XML的方法省略。主要討論如何使用Hashtable和ArrayList,然后加上ASP.NET自帶的JavaScriptSerializer來生成JSON數據,然后返回給前端使用。當然目前微軟的ASP.MVC和ASP.NET Web API在處理JSON格式數據有很大的改進,特別是前端使用Ajax方式post一個json數據給服務器端,后台反序列化一個對象,就可以方便實現后台的相關業務邏輯。
代碼如下:
ArrayList eventList = new ArrayList(); for (int i = 0; i < 3;i++ ) { Hashtable ht = new Hashtable(); ht.Add("eventid",i+1); ht.Add("eventname","聖誕節"); ht.Add("eventdate","2012-12-25"); ht.Add("eventlocation","公司會議中心"); eventList.Add(ht); } JavaScriptSerializer ser = new JavaScriptSerializer(); String jsonStr=ser.Serialize(eventList); Response.Write(jsonStr);
查看頁面,可以看到返回的結果是JSON格式的數據。實際上是一個數組,數組里面每項是一個json對象。
[{"eventdate":"2012-12-25","eventlocation":"公司會議中心","eventname":"聖誕節","eventid":1},{"eventdate":"2012-12-25","eventlocation":"公司會議中心","eventname":"聖誕節","eventid":2},{"eventdate":"2012-12-25","eventlocation":"公司會議中心","eventname":"聖誕節","eventid":3}]
我們可以通過這個網址驗證生成的json是否正確。http://jsonlint.com/
但是我們需要注意的是,hashtable在存放數據時是無序的,所以數據並不是按照我們插入的先后順序顯示的。我們可能期望的數據格式是:
{"eventid":1","eventname":"聖誕節",eventdate":"2012-12-25","eventlocation":"公司會議中心"}
但是我們查看我們的結果不是這樣的,但是數據返回給前端之后,還是要通過JSON.parse()方法轉換為json對象,所以不按照特定的順序,對我們開發不影響。
數據在HTTP協議上傳輸都是使用二級制流,所以數據到達客戶端,需要通過JSON.parse()。我的項目是Windows8 Metro App,當然也可以是網頁或者web 應用。
當然如果前端和后台的數據模型一致,還可以直接通過對象實例直接序列化一個json格式數據。