javascript
用 .NET 3.5 创建 ToJSON() 扩展方法
今年早些時候,我通過blog介紹了 C# 和 VB 語言的一項新的擴充特性"擴展方法"。
擴展方法讓開發者可以向已有的 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 項目,來把這些方法捆綁到一個庫中以便利用。
希望這篇帖子對你有用,
轉載于:https://www.cnblogs.com/China-Dragon/archive/2010/05/10/1731682.html
總結
以上是生活随笔為你收集整理的用 .NET 3.5 创建 ToJSON() 扩展方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intent 的用法
- 下一篇: FastReport.Net 使用字符串