新聞中心
在ASP.NET AJAX中使用了JSON作為客戶端與服務器端傳遞對象信息的方式。因此,在ASP.NET AJAX客戶端與服務器端均提供了序列化與反序列化的能力。了解這些內(nèi)容的使用方法,可以說是使用與擴展ASP.NET AJAX所必須的能力。我們就來看一下ASP.NET AJAX中的序列化與反序列化的能力。

創(chuàng)新互聯(lián)建站主要從事做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務西夏,十年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108
一、客戶端的序列化與反序列化能力:
在ASP.NET AJAX中,為客戶端提供序列化能力的是Sys.Serialization.JavaScriptSerializer類的serialize靜態(tài)方法。這個方法能夠?qū)⒁粋€客戶端對象序列化成為一個JSON字符串,它的使用方法非常簡單。如下:
- var jsonStr = Sys.Serialization.JavaScriptSerializer.serialize(obj);
沒有過多可說的內(nèi)容,可能比較“有特點”的地方就是它對于客戶端Date對象的序列化操作。如果我們調(diào)用下面的代碼,會出現(xiàn)什么結(jié)果呢?
- var jsonStr = Sys.Serialization.JavaScriptSerializer.serialize(new Date());
得到的結(jié)果類似于是“"@1162814090119@"”,請注意兩邊還有雙引號。這個是一個ASP.NET AJAX對于Date對象比較特殊的表示方法,如果在某些時候開發(fā)人員需要自己來“拼接”字符串時,就需要注意這一點。
給ASP.NET AJAX客戶端帶來反序列化能力的就是Sys.Serialization.JavaScriptSerializer類的deserialize靜態(tài)方法。如下:
- var obj = Sys.Serialization.JavaScriptSerializer.deserialize(jsonStr);
它事實上只是簡單地調(diào)用了 JavaScript內(nèi)置的eval方法。當然,既然序列化時對于Date對象有特殊的表示方法,在反序列化時,也會考慮到這一點: Sys.Serialization.JavaScriptSerializer類的deserialize靜態(tài)方法在調(diào)用Evail之前,會把 “"@...@"”變成“new Date(...)”的形式,這就是標準的JSON字符串了。
二、JavaScriptTypeResolver與JavaScriptConverter:
客戶端的序列化和反序列化非常簡單,我把它放在這里一并說明更像是為了讓內(nèi)容更加完整。而服務器端的序列化與反序列化就不是那么輕易的了,它涉及到大量的字符串操作,也涉及到一定的自定義能力。這才是這片文章想要著重說明的。
ASP.NET AJAX提供的序列化和反序列化能力都是由Microsoft.Web.Script.Serialization這個命名空間下的類完成的。不過幸運的是,他們大都是內(nèi)部類,真正能夠給開發(fā)人員使用的只有JavaScriptSerializer類的數(shù)個方法而已。ASP.NET AJAX已經(jīng)帶給我們比較充足的序列化與反序列化的能力,我們只需要掌握它,知道它們是如何工作的,那一般也就足夠了。
不過要進入對于這些序列化與反序列化能力的了解,首先需要了解其它的兩個類:JavaScriptTypeResolver和JavaScriptConverter。
1、JavaScriptTypeResolver
JavaScriptTypeResolver是一個抽象類,雖然是***次在Atlas多個Release中出現(xiàn),但是它并不是一個新鮮事物。它的作用就相當于Atlas CTP中的IJavaScriptSerializeContext接口,甚至可以說只是換了類名和方法名(事實上,從一個接口轉(zhuǎn)變?yōu)橐粋€抽象類,這個做法讓人摸不著頭腦,因為現(xiàn)在的抽象類也不存在任何的實現(xiàn))。這個類的作用是“將一個字符串,與一個特定的類進行關(guān)聯(lián),使字符串成為那個特定類的一個標識 ”。這個抽象類存在著兩個方法:
1. String ResolveTypeId(Type):得到Type對象的標識字符串。
2. Type ResolveType(String):從字符串標識獲取一個Type對象。
可以看出,這兩個方法是一對相反的操作。他們會分別運用在序列化于反序列化操作之中。如果對于這個類的作用還不是非常了解的話,那么可以看一下 ASP.NET AJAX中這個抽象類的一個簡單實現(xiàn)。那就是 Microsoft.Web.Script.Serialization.SimpleTypeResolver類。它的代碼如下:
- public sealed class SimpleTypeResolver : JavaScriptTypeResolver
- {
- public override Type ResolveType(string id)
- {
- return Type.GetType(id);
- }
- public override string ResolveTypeId(Type type)
- {
- if (type == null)
- {
- throw new ArgumentNullException("type");
- }
- return type.AssemblyQualifiedName;
- }
- }
以上介紹ASP.NET AJAX客戶端
分享名稱:詳解ASP.NETAJAX客戶端
轉(zhuǎn)載來源:http://fisionsoft.com.cn/article/dhohhdg.html


咨詢
建站咨詢
