ASP.NET AJAX的JSON序列化和反序列化
JSON序列化和反序列化
- POST /Ajax/ZipCodeService.asmx/GetCityAndState HTTP/1.1
- Accept: */*
- Accept-Language: en-us
- Referer: http://localhost:1997/Ajax/ZipCodePage.aspx
- UA-CPU: x86
- Accept-Encoding: gzip, deflate
- User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; ...)
- Host: localhost:1997
- Content-Length: 15
- Connection: Keep-Alive
- Cache-Control: no-cache
- {"zip":"98052"}
- HTTP/1.1 200 OK
- Server: ASP.NET Development Server/8.0.0.0
- Date: Fri, 29 Dec 2006 21:06:17 GMT
- X-AspNet-Version: 2.0.50727
- Cache-Control: private, max-age=0
- Content-Type: application/json; charset=utf-8
- Content-Length: 16
- Connection: Close
- {"REDMOND", "WA"}
JSON 是一個正在嶄露頭角的行業(yè)標(biāo)準(zhǔn)序列化格式。它還是被 ASP.NET AJAX 使用的本機(jī)格式。Microsoft AJAX Library 的 Sys.Serialization.JavaScriptSerializer 類支持在客戶端進(jìn)行 JSON序列化和反序列化。System.Web.Script.Serialization.JavaScriptSerializer 類支持在服務(wù)器上進(jìn)行 JSON序列化和反序列化。
并非所有類型均與 JSON 兼容。例如,JSON 不能處理具有循環(huán)引用的對象。當(dāng)您需要返回不能與 JSON 兼容的復(fù)雜數(shù)據(jù)類型時,其實您可以使用 ASP.NET AJAX 的 ScriptMethod 屬性將返回類型序列化為 XML。這個技術(shù)對返回 XML 數(shù)據(jù)的方法也很有用,如下所示:
- [ScriptMethod (ResponseFormatResponseFormat=ResponseFormat.Xml)]
- public XmlDocument GetData()
- {
- ...
- }
此外,您還可以構(gòu)建和注冊自定義 JSON 轉(zhuǎn)換器,它允許將通常不能與 JSON 兼容的類型序列化和反序列化。ASP.NET AJAX January Futures CTP 包含三個這樣的轉(zhuǎn)換器:一個針對 DataSet,一個針對 DataTable,還有一個針對 DataRow。
【編輯推薦】