在ASP.NET中使用JSON

引用:


最近在項目中接觸到無刷新分頁技術.覺得有必要記錄下一些東西.
首當其衝的當然是首次用到的JSON技術.之前在做ajax的時候,對於handler傳回給js的數據,總是以一個又一個的字符串數組作爲載體.相當麻煩. 雖然之前看過有關JSON的文字,但是卻沒有想到使用JSON,於是,在界面上我會弄一個又一個隱藏域.. 汗顏...


對於JSON,又有進一步的理解了. 對於實體類中含有DateTime類型字段的對象,個人理解是最好不要使用JSON,因爲在js接收到數據之後,是以毫秒爲單位的.這也倒是挺好解決,問題是還含有時區,並且,假設數據庫中的值是"2010-5-10 12:00:00",我沒有完美解決的辦法, 我所做的辦法是,在查詢數據庫的時候,對該值進行截斷,只取"2010-5-10",否則,js接收到的數據,就亂了套..

如果對於實體類中不包含DateTime類型字段,並且的字段比較多. 個人覺得JSON是首選.

下面是在asp.net中使用JSON的步驟,
在UI層,需要添加"System.ServiceModel.Web"引用.
1.首先獲得想要的數據
List<Models.Blog_albumsInfo> All_album=Bll.Blog_albums.FindAllAlbums(user_id);
2.實例化JSON對象,
var json = new DataContractJsonSerializer(typeof(List<Models.Blog_albumsInfo>), new Type[] {typeof(string) });
3.將JSON獲得的數據寫到上下文的響應中

json.WriteObject(context.Response.OutputStream, All_album);

在js中接收到的數據,會是這樣一種形式

/**************
 [{ "Album_fm": "1", "Album_id": 18, "Album_name": "
靚照1", "Sort": 18, "User_id": 1 },

{ "Album_fm": "1", "Album_id": 17, "Album_name": "靚照7", "Sort": 17, "User_id": 1 },

{ "Album_fm": "1", "Album_id": 16, "Album_name": "靚照6", "Sort": 16, "User_id": 1 }]
 **************/

上面的形式, 已經很明瞭的表示了實體類每個對象的數據,只需要進行字符串處理,即可得到相應數據,

在js中,可以使用eval函數把字符串數組轉換成dom對象,循環遍歷即可.

//轉成dom對象

var obj = eval("(" + data_arr[0] + ")");

for (var i = 0; i < obj.length; i++) {

var id = obj[i].Album_id;//相應數據

var name = obj[i].Album_name;//相應數據...
}

 

需要注意的是,以上方法,是針對VS2008,並且已經打上SP1補丁的. 如果沒有打SP1補丁.還需要更多步驟

UI層添加“System.Runtime.Serialization”引用。DataContract
對實體類添加[DataContract]特性,另外對每個屬性添加[DataMember]特性,其他步驟與上面相同。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章