程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 技巧/訣竅:用.NET 3.5創建ToJSON()擴展方法

技巧/訣竅:用.NET 3.5創建ToJSON()擴展方法

編輯:關於.NET

擴展方法讓開發者可以向已有的 CLR 類型的公共契約中添加新的方法,而不 需要子類化或重新編譯原有的類型。通過這種做法,可以使很多有用的應用場景 成為可能(包括 LINQ)。同時,擴展方法也可以用來非常方便地向代碼中添加 "語法糖"。

過去幾個月,我一直在准備一些很酷的擴展方法的清單,並計劃在有空的時 候實現它們(不確定何時...但至少我還能從這些想法中獲得樂趣)。在上述清 單中有兩個擴展方法的應用場景,分別是用於為任意 .NET 對象自動生成JSON (JavaScript Object Notation)或 XML 序列化字符串的。

簡單場景:ToJSON() 擴展方法

假設我有一個 Person 類定義如下(注意:我使用了 自動屬性的新特性來實 現):

接下來,我就可以初始化一系列 Person 對象的集合,然後只需調用 ToJSON() 擴展方法,就能得到表示該集合內容的 JSON 字符串。如下所示:

這和 .NET 中內建的,Object 類的 ToString() 方法調用方式很相似 —— 只是生成的結果是表示集合內容的 JSON 格式的字符串而已。 然後我們就可以在 AJAX 場景的客戶端使用它:

注意:點擊上圖中調試器的放大鏡圖標,可以打開"文本視圖(Text Visualizer)",能更方便的查看 JSON 序列化字符串:

接下來,這個字符串格式在客戶端可以用 JavaScript 來實例化為合適的 JavaScript 對象,用於表示我的集合內容(注: ASP.NET AJAX 有一個內建的 JavaScript 庫支持這些特性)。

實現 ToJSON 擴展方法

實現一個基本的 ToJSON() 擴展方法很簡單。只要使用 System.Web.Script.Serialization 命名空間下的 JavaScriptSerializer 類即 可,然後象下面所示的那樣定義兩個擴展方法。其中一個方法用於對目標對象圖 (object graph)進行"深"的序列化,而另一個方法則是一個重載的 版本,它允許你指定序列化的深度(比如:ToJSON(2) 只序列化 2 個層次的深 度)。

注意,上面的 ToJSON() 擴展方法只是針對 "Object" 類型而定 義的——這意味著它可以被用於 .NET 中的任何類型(不限於集合) 。也就是說,我們不僅能對上述集合調用 .ToJSON() 方法,還可以對單獨的 Person 對象調用 ToJSON() 方法,或者任意其他的 .NET 類型都可以。

要使用上述擴展方法,只需在程序的頂部添加如下命名空間的引用即可:

然後 VS 2008 就可以為任意對象提供針對這些擴展方法的代碼自動完成和編 譯時支持功能:

注意:除了 JavaScriptSerializer 類之外,.NET 3.5 還包含一個新的new System.Runtime.Serialization.DataContractJsonSerializer class 類 ,你 也可以用它來做 JSON 序列化/反序列化的工作。

小結

希望以上的例子能給你一個使用擴展方法來封裝功能的示例。下次希望我們 一起來看一些好的工具庫,用於提供類似有用的擴展方法的功能。

我非常想看到其他關於可復用的擴展方法使用場景的建議(請通過這篇帖子 的評論來建議)。然後我們可以琢磨出,如何創建一個好的 CodePlex 項目,來 把這些方法捆綁到一個庫中以便利用。

希望這篇帖子對你有用,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved