JSON 与 xml

来源:互联网 发布:在淘宝上怎么秒杀 编辑:程序博客网 时间:2024/05/20 00:16

【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。