這篇文章主要講解了“ASP.NET AJAX循環(huán)引用的類型怎么用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ASP.NET AJAX循環(huán)引用的類型怎么用”吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、上杭網(wǎng)站維護(hù)、網(wǎng)站推廣。
有時候在Web Service中會需要使用到比較復(fù)雜的類型,它們的特征往往都是含用循環(huán)引用,這樣的對象如果交給ASP.NET AJAX中默認(rèn)的序列化方式來處理則會拋出異常,大家經(jīng)常遇到的“DataTable”問題正是由此引起的。關(guān)于這一點(diǎn),ASP.NET AJAX自然提供了解決方法,在這里“官方”的解決方案就是JavaScriptConverter,它可以讓開發(fā)人員自定義特定類型的序列化能力。
事實(shí)上,需要自定義JavaScriptConverter的類型不止“含有循環(huán)引用”的類型,事實(shí)上,JavaScriptConverter的目標(biāo)是“ASP.NET AJAX中無法操作,或者結(jié)果不是開發(fā)人員所期望那樣”的類型,這里的“操作”包括“序列化”于“反序列化”兩部分。再舉個例子:如果一個類型沒有無參數(shù)的構(gòu)造函數(shù),那么也需要定義JavaScriptConverter,否則ASP.NET AJAX無法對其進(jìn)行反序列化操作。
那么我們就通過一個簡單的例子來看一下應(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; }
很顯然,如果我將它們“配成一對”,在序列化輸出時就會拋出異常了。就沖著這點(diǎn),我們就必須定義一個JavaScriptConverter啊,總不能拆散他倆。
2、定義JavaScriptConverter以及序列化能力
我們下面就該開始定義JavaScriptConverter了,我們姑且將其稱之為BoyConverter。首先需要告訴ASP.NET,我們這個Converter可以支持哪些類型:
public class BoyConverter : JavaScriptConverter { public override IEnumerableSupportedTypes { get { yield return typeof(Boy); } } …… }
如果要實(shí)現(xiàn)一個比較良好的Serialize方法,就需要處理“有循環(huán)引用”和“沒有循環(huán)引用”兩種情況。幸運(yùn)的是,對于Serialize方法來說,這點(diǎn)比較容易:
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)引用的類型怎么用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對ASP.NET AJAX循環(huán)引用的類型怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!