成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET中定義JavaScriptConverter

開發 后端
本文介紹ASP.NET中定義JavaScriptConverter,通過一個簡單的例子來看一下應該如何開發和使用JavaScriptConverter。

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

事實上,需要自定義JavaScriptConverter的類型不止“含有循環引用”的類型,事實上,JavaScriptConverter的目標是“ASP.NET AJAX中無法操作,或者結果不是開發人員所期望那樣”的類型,這里的“操作”包括“序列化”于“反序列化”兩部分。再舉個例子:如果一個類型沒有無參數的構造函數,那么也需要定義JavaScriptConverter,否則ASP.NET AJAX無法對其進行反序列化操作。

那么我們就通過一個簡單的例子來看一下應該如何開發和使用JavaScriptConverter吧。

1、定義存在循環引用的類型

首先我們定義一個Boy類和Girl類以供使用:

  1. public class Boy  
  2. {  
  3. public string Name;  
  4. public Girl GirlFriend;  
  5. }  
  6. public class Girl  
  7. {  
  8. public string Name;  
  9. public Boy BoyFriend;  

很顯然,如果我將它們“配成一對”,在序列化輸出時就會拋出異常了。就沖著這點,我們就必須定義一個JavaScriptConverter啊,總不能拆散他倆。


2、定義JavaScriptConverter以及序列化能力

我們下面就該開始定義JavaScriptConverter了,我們姑且將其稱之為BoyConverter。首先需要告訴ASP.NET,我們這個Converter可以支持哪些類型:

  1. public class BoyConverter : JavaScriptConverter  
  2. {  
  3. public override IEnumerable<Type> SupportedTypes  
  4. {  
  5. get  
  6. {  
  7. yield return typeof(Boy);  
  8. }  
  9. }  
  10. ……  

如果要實現一個比較良好的Serialize方法,就需要處理“有循環引用”和“沒有循環引用”兩種情況。幸運的是,對于Serialize方法來說,這點比較容易:

  1. public override IDictionary<string, object> Serialize(object obj, 
    JavaScriptSerializer serializer)  
  2. {  
  3. IDictionary<string, object> result = new Dictionary<string, object>();  
  4. Boy boy = (Boy)obj;  
  5. result["Name"] = boy.Name;  
  6. // 如果有GirlFriend引用  
  7.     if (boy.GirlFriend != null)  
  8. {  
  9. // 摘除循環引用  
  10.         boy.GirlFriend.BoyFriend = null;  
  11. result["GirlFriend"] = boy.GirlFriend;  
  12. // 在客戶端再建立關聯  
  13.         result["__getRealObject"] =  
  14. "function(o) { oo.GirlFriend.BoyFriend = o; return o; }";  
  15. }  
  16. return result;  

在這里,我們“手動”地將Boy對象轉換為了一個IDictionary<string, objct>,這樣就避免出現了循環引用。另外,為了在客戶端直接得到一個互相引用的“Boy”和“Girl”對象,我在這里使用了我在前一片文章中提到的擴展,具體請見《深入Atlas系列:綜合示例(1) - 調用服務器端方法時直接獲得客戶端具體類型》。


3、自定義序列化功能使用示例

那么我們來看一下使用示例吧,首先我們需要定義一個Web Service方法:

  1. [WebService(Namespace = "http://tempuri.org/")]  
  2. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
  3. [Microsoft.Web.Script.Services.ScriptService]  
  4. public class BoyGirlService  : System.Web.Services.WebService {  
  5. [WebMethod]  
  6. public Boy GetBoy(string boyName, string girlName)  
  7. {  
  8. Boy boy = new Boy();  
  9. boy.Name = boyName;  
  10. if (!String.IsNullOrEmpty(girlName))  
  11. {  
  12. Girl girl = new Girl();  
  13. girl.Name = girlName;  
  14. girl.BoyFriend = boy;  
  15. boy.GirlFriend = girl;  
  16. }  
  17. return boy;  
  18. }  

以上介紹在ASP.NET中定義JavaScriptConverter

【編輯推薦】

  1. ASP.NET中的WebRequestExecutor
  2. IIS6的ASP.NET ISAPI請求處理過程
  3. ASP.NET中的備份
  4. 淺談ASP.NET ISAPI
  5. ASP.NET的IIS ISAPI extension
責任編輯:佚名 來源: IT168
相關推薦

2012-05-04 15:54:16

ASP.NET

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-27 15:25:40

aspx頁面ASP.NET

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-07-21 11:11:44

刪除CookieASP.NET

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-07-29 16:08:07

ASP和ASP.NET

2009-07-27 13:01:28

TreeViewASP.NET

2009-07-31 09:58:20

URL映射ASP.NET

2009-08-04 17:20:37

PostBack和ViASP.NET

2009-08-04 18:05:37

動態編譯ASP.NET

2011-06-08 11:36:16

ASP.NETrender

2009-07-20 16:56:16

SQL語句ASP.NET

2009-07-21 17:18:26

UpdateProgrASP.NET AJA

2009-07-22 17:55:52

2009-07-20 17:21:43

Session狀態ASP.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 女女爱爱视频 | 中文字幕在线播放不卡 | 国产精品亚洲成在人线 | 天天干天天爱天天 | 91精品入口蜜桃 | 国产精品久久久久久久久久妞妞 | www.久久艹 | 亚洲免费在线 | 伊人成人免费视频 | 国产欧美精品一区二区色综合朱莉 | 毛片在线视频 | 欧美日韩国产综合在线 | 亚洲精品456 | 91久久久www播放日本观看 | 色婷婷狠狠 | 日韩中文字幕在线播放 | 91.com视频| 国产精品成人国产乱一区 | 中文字幕亚洲一区二区va在线 | 围产精品久久久久久久 | 黄色片在线 | 永久网站 | www.亚洲一区二区 | 日韩一区精品 | 国产农村妇女精品一区 | 国产欧美一区二区三区久久人妖 | 亚洲免费成人av | 久久久久亚洲国产| 国产精品国产精品国产专区不蜜 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美1—12sexvideos | 97在线超碰 | a视频在线观看 | 日韩国产一区 | 成人午夜精品 | 一本色道精品久久一区二区三区 | 午夜免费av | 欧美成人一区二区 | 在线免费观看毛片 | 成人精品一区二区三区 | 久久久久久国模大尺度人体 |