描述對(duì)象數(shù)據(jù)類型JSON字符串方法
當(dāng)對(duì)象實(shí)例創(chuàng)建結(jié)束,我們就可以調(diào)用DeserializeInternal()方法。這個(gè)方法具體負(fù)責(zé)解析JSON序列化字符串并創(chuàng)建相應(yīng)的原始類型的對(duì)象。于是對(duì)象定義中會(huì)包括一個(gè)字符串常量__type,它的后面跟著的是描述對(duì)象數(shù)據(jù)類型的JSON字符串。
如果這個(gè)對(duì)象通過一個(gè)web服務(wù)方法返回,那么此對(duì)象將在內(nèi)部處理器RestHandler類的InvokeMethod()方法中被自動(dòng)序列化。然而在上面的例子中,我們卻在我們的Web頁(yè)面的典型的Page.Page_Load()方法內(nèi)部使用這些對(duì)象。#t#
因此,我們應(yīng)該創(chuàng)建這些對(duì)象并且自動(dòng)地使用前面已經(jīng)討論的JavaScriptSerializer對(duì)象對(duì)它們進(jìn)行序列化。例如,我們來考慮使用如下代碼來序列化一個(gè)對(duì)象的情形:
- JavaScriptSerializer jsSerializer = new
- JavaScriptSerializer(new SimpleTypeResolver());
- Customer cust = new Customer();
- cust.FirstName = "Joe";
- cust.EmailAddress = "jknown@domain.com";
- cust.PhoneNumbers = new Phone();
- cust.PhoneNumbers.HomePhone = "888-888-8888";
- string serializedText = jsSerializer.Serialize(cust);
根據(jù)前面的分析,JavaScriptSerializer對(duì)象已經(jīng)使用SimpleTypeResolver初始化完畢(其中,JSON字符串負(fù)責(zé)把要序列化的對(duì)象轉(zhuǎn)換成一個(gè)字符串形式)。下面,我們來看一下序列化之后的JSON文本:
- {"__type":"Customer, App_Web_plrzlwbj,
- Version=0.0.0.0, Culture=neutral,
- PublicKeyToken=null","FirstName":"Joe","LastName":null,
- "EmailAddress":jknown@domain.com,
- "PhoneNumbers":{"__type":"Phone, App_Web_plrzlwbj, Version=0.0.0.0,
- Culture=neutral, PublicKeyToken=null",
- "HomePhone":"888-888-8888","WorkPhone":null}}
根據(jù)前面的分析,JavaScriptSerializer對(duì)象已經(jīng)使用SimpleTypeResolver初始化完畢(其中,SimpleTypeResolver負(fù)責(zé)把要序列化的對(duì)象轉(zhuǎn)換成一個(gè)字符串形式)。下面,我們來看一下序列化之后的JSON字符串:
- public class Customer
- {
- private string _firstName;
- public string FirstName
- {
- get { return _firstName; }
- set { _firstName = value; }
- }
- private string _lastName;
- public string LastName
- {
- get { return _lastName; }
- set { _lastName = value; }
- }
- private string _email;
- public string EmailAddress
- {
- get { return _email; }
- set { _email = value; }
- }
- private Phone _phoneNumber;
- public Phone PhoneNumbers
- {
- get { return _phoneNumber; }
- set { _phoneNumber = value; }
- } }
注意,其中的PhoneNumbers屬性屬于定制類型—Phone。因此,當(dāng)被序列化時(shí),JSON字符串的值本身就是一個(gè)JSON對(duì)象,它正是Phone對(duì)象的序列化之后的形式。再次強(qiáng)調(diào)的是,這里添加了類型標(biāo)記,以備反序列化時(shí)使用,從而確保創(chuàng)建相應(yīng)類型的原始對(duì)象。