【1】JSON:
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,易於閱讀和編寫,同時也易於機器解析和生成。它基於ECMA262語言規範(1999-12第三版)中JavaScript 編程語言的一個子集。 JSON採用與編程語言無關的文本格式,但是也使用了類C語言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的習慣,這些特性使JSON成爲理想的數據交換格式。
【2】JSON例子:
【2.1】現在我們看一下JSONd數據結構。JSON的結構基於下面兩點:
- “名稱/值”對的集合 不同語言中,它被理解爲對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash table),鍵列表(keyed list)。
- 值的有序列表 多數語言中被理解爲數組(array)。
JSON必須(MUST)是一個對象、數組、數字或字符串,或者是下面三個實字名之一:
- false null true
實字名必須(MUST)是小寫的,且不允許有其它的實字名。
- value = false / null / true / object / array / number / string
【2.2】我們可以定義一個User的代碼,JSON表示如下:
var user1= { “Name”:”Frank”, “Address”:”ShangHai”};
也可以定義一個對象的集合,JSON示例如下:
下面代碼演示了使用JSON形式定義這個用戶列表:
var userList = [
{ “Name”:”Frank”, “Address”:”ShangHai”},{ “Name”:”Xu Lei”, “Address”:”BeiJing”},
]
【2.3】與XML比較:
我們知道。XML是可擴展置標語言(eXtensible Markup Language,簡稱XML),又稱可擴展標記語言。這與JSON有很大不同。雖然都是表示數據。JSON與XML最大的不同在於XML是一個完整的標記語言,而JSON不是。這使的XML在程序判讀上需要比較多的功夫。主要的原因在於XML的設計理念與JSON不同。XML利用標記語言的特性提供了絕佳的延展性(如XPath),而JSON的重點在於數據的交換。
【3】WCF 的JSON編程模型:
既然JSON與XML成爲又一個標準的數據交換格式。那麼WCF也對其進行了很好的支持。現在我們來看看WCF的JSON編程模型。
我們知道WCF的Web編程模型已經非常的完善,並且很好地支持了XML格式的數據交換。這裏如果要對JSON支持,首先要做的就是對於數據對象的JSON序列化和反序列化。也就是Data Object—>JSON—>Data Object這樣的過程。
那麼爲了做好這一點,WCF提供了一個專門的序列化器,DataContractJsonSerializer 。來提供對於JSON數據的支持工作。
此序列化器的MSDN介紹如下:
可以使用 DataContractJsonSerializer 類將類型實例序列化爲 JSON 文檔,並將 JSON 文檔反序列化爲類型實例。例如,可以使用包含重要數據(如名稱和地址)的屬性創建一個名爲 Person 的類型。然後,可以創建和操作一個 Person 類實例,並在 JSON 文檔中寫入所有其屬性值以便於以後檢索。可隨後將該 JSON 文檔反序列化爲 Person 類,或者反序列化爲另一個具有等效數據協定的類。如果在服務器上的傳出答覆的序列化期間發生錯誤或答覆操作由於某種其他原因引發異常,則可能不會將其作爲錯誤返回到客戶端。
當然和DataContractSerializer一樣,DataContractJsonSerializer的工作也是出於WCF的背後。除非我們自己要控制序列化和反序列化過程。WCF裏我們可以方便地定義數據類型,然後框架會根據我們設置的數據格式來確定使用那個序列化器。比如:RequestFormat=WebMessageFormat.Xml,ResponseFormat=WebMessageFormat.Json)
請求使用的是DataContractSerializer,而返回數據使用的是DataContractJsonSerializer。