新聞中心
有時候在Web Service中會需要使用到比較復(fù)雜的類型,它們的特征往往都是含用循環(huán)引用,這樣的對象如果交給ASP.NET AJAX中默認的序列化方式來處理則會拋出異常,大家經(jīng)常遇到的“DataTable”問題正是由此引起的。關(guān)于這一點,ASP.NET AJAX自然提供了解決方法,在這里“官方”的解決方案就是JavaScriptConverter,它可以讓開發(fā)人員自定義特定類型的序列化能力。

為龍勝等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及龍勝網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、龍勝網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
事實上,需要自定義JavaScriptConverter的類型不止“含有循環(huán)引用”的類型,事實上,JavaScriptConverter的目標是“ASP.NET AJAX中無法操作,或者結(jié)果不是開發(fā)人員所期望那樣”的類型,這里的“操作”包括“序列化”于“反序列化”兩部分。再舉個例子:如果一個類型沒有無參數(shù)的構(gòu)造函數(shù),那么也需要定義JavaScriptConverter,否則ASP.NET AJAX無法對其進行反序列化操作。
那么我們就通過一個簡單的例子來看一下應(yīng)該如何開發(fā)和使用JavaScriptConverter吧。
1、定義存在循環(huán)引用的類型
首先我們定義一個Boy類和Girl類以供使用:
- public class Boy
- {
- public string Name;
- public Girl GirlFriend;
- }
- public class Girl
- {
- public string Name;
- public Boy BoyFriend;
- }
很顯然,如果我將它們“配成一對”,在序列化輸出時就會拋出異常了。就沖著這點,我們就必須定義一個JavaScriptConverter啊,總不能拆散他倆。
2、定義JavaScriptConverter以及序列化能力
我們下面就該開始定義JavaScriptConverter了,我們姑且將其稱之為BoyConverter。首先需要告訴ASP.NET,我們這個Converter可以支持哪些類型:
- public class BoyConverter : JavaScriptConverter
- {
- public override IEnumerable
SupportedTypes - {
- get
- {
- yield return typeof(Boy);
- }
- }
- ……
- }
如果要實現(xiàn)一個比較良好的Serialize方法,就需要處理“有循環(huán)引用”和“沒有循環(huán)引用”兩種情況。幸運的是,對于Serialize方法來說,這點比較容易:
- public override IDictionary
, object> Serialize(object obj,
JavaScriptSerializer serializer)- {
- IDictionary
, object> result = new Dictionary , object>(); - Boy boy = (Boy)obj;
- result["Name"] = boy.Name;
- // 如果有GirlFriend引用
- if (boy.GirlFriend != null)
- {
- // 摘除循環(huán)引用
- boy.GirlFriend.BoyFriend = null;
- result["GirlFriend"] = boy.GirlFriend;
- // 在客戶端再建立關(guān)聯(lián)
- result["__getRealObject"] =
- "function(o) { oo.GirlFriend.BoyFriend = o; return o; }";
- }
- return result;
- }
以上介紹ASP.NET AJAX循環(huán)引用的類型
【編輯推薦】
- ASP.NET MVC Web應(yīng)用程序工程
- IIS6的ASP.NET ISAPI請求處理過程
- ASP.NET控件的七種用戶管理相關(guān)控件
- 對ASP.Net進行RSA加密
- ASP.NET得到數(shù)據(jù)庫字符串的方法
本文題目:ASP.NET AJAX循環(huán)引用的類型
本文鏈接:http://m.fisionsoft.com.cn/article/ccohjid.html


咨詢
建站咨詢
