這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)ASP.NET中如何定義JavaScriptConverter,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供蘄春企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計、H5建站、小程序制作等業(yè)務(wù)。10年已為蘄春眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。
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 IEnumerableSupportedTypes { 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;
}
在這里,我們“手動”地將Boy對象轉(zhuǎn)換為了一個IDictionary
3、自定義序列化功能使用示例
那么我們來看一下使用示例吧,首先我們需要定義一個Web Service方法:
[WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [Microsoft.Web.Script.Services.ScriptService] public class BoyGirlService : System.Web.Services.WebService { [WebMethod] public Boy GetBoy(string boyName, string girlName) { Boy boy = new Boy(); boy.Name = boyName; if (!String.IsNullOrEmpty(girlName)) { Girl girl = new Girl(); girl.Name = girlName; girl.BoyFriend = boy; boy.GirlFriend = girl; } return boy; } }
上述就是小編為大家分享的ASP.NET中如何定義JavaScriptConverter了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。