一、前言

  最近在做项目的过程中,涉及到Json格式数据的处理,由于之前对Json不是太了解,所以借这次机会,对Json进行了一下全面的研究性学习,从而对Json有一个更深层次的理解。记得有位老师曾经说过,总结是最好的学习方法,所以,接下来我将就自己对Json的学习进行一下全面细致的总结,与各位同仁进行交流学习。其中有不对之处,还请各位大牛指正。

二、Json简介

  Json即JavaScript Object Notation(JavaScript对象表示法),Json为轻量级的文本数据交换格式,其独立于语言,使用JavaScript语法来描述数据对象,Json解析器和Json库支持许多不同的编程语言,例如PHP、Java、.Net等。Json是存储和交换文本信息的语法,类似于

三、Json的语法格式

  Json数据格式:主要由对象 { } 和数组 [ ] 组成,其中对象包括键值对(属性:属性值){key: value},value 可为 str,num,list,obj。取值使用 objcet.key{key: value, key2:value2,} 键:值用冒号分开,对间用,连接数组包含元素:num,str,list,objcet 都可以,利用索引访问 [index],用 . 连接各个值。

  Json实例:

var stu = {"student":   //stu 对象包含student的key,值为一个数组[          //数组的每一个值为一个具体的学生对象{"name": "Tom","Grade":1, "age":11, "gender": "M"},  //学生对象的键为名字,值为对应属性{"name": "Jerry", "Grade":1, "age":10, "gender": "M"}  //每个属性对应的是一个key,value对],"classroom": {"class1": "room1", "class2": "room2"}   //对象的值,嵌套对象};

  读取数据:

document.write(stu.student[1].name);  // 输出第二个学生名document.write(stu.student[0].age);  // 输出第一个学生年龄document.write(stu.classroom.class1); // 输出 classroom 的 class1 值document.write(stu["classroom"].class2); // 也可用中括号键访问对象值

   如需要对Json数据格式进行遍历,则使用如下方法:

function JsonLoop(json) { for (var key in json) {  if (json.hasOwnProperty(key))  {   if (typeof json[key]=="object")   {    JsonLoop(json[key]);   }   else   {    console.log("key:" + key + ", val:" + json[key]);   }  } }}//调用方式JsonLoop(stu)

四、Json的应用

  通过以上对Json的介绍,相信读者对Json已有了一个初步的了解,那么Json都有哪些重要的应用呢?别急!下面我们一起来探讨Json的应用。Json作为目前较流行的一种序列化的方式,因其结构简单、容易理解、适用性强等优势,现已逐渐代替

  在开始介绍序列化之前,我们再次对Json的几种表现形式进行一下梳理:

  1、对象:一个没有顺序的“键/值”,一个对象以花括号“{”开始,并以花括号"}"结束,在每一个“键”的后面,有一个冒号,并且使用逗号来分隔多个键值对。例如:var  student={"Name":"李莱",“Sex”:"男",“BirthDay”:"1992-08-21"};

  2、数组:设置值的顺序,一个数组以中括号"["开始,并以中括号"]"结束,并且所有的值使用逗号分隔。例如:var StudentList=[{"Student":{"Name":"李莱",“Sex”:"男",“BirthDay”:"1992-08-21"}},{"Student":{"Name":"王梅",“Sex”:"女",“BirthDay”:"1993-07-21"}}];

  3、字符串:任意数量的Unicode字符,使用引号做标记,并使用反斜杠来分隔。例如:var StudentList="{\"Name\":\"李磊\",\"Sex\":\"男\",\"BirthDay\":\"1992-08-21\"}"。

  在介绍序列化之前,我们有必要对序列化与反序列化的定义、作用进行一下了解。

  1、序列化与反序列化的定义:

  • 序列化:序列化就是将对象转化为字节序列的过程;
  • 反序列化:反序列化就是把字节序列恢复成对象的过程;

  2、序列化与反序列化的作用:

  • 序列化的作用:序列化的作用是在进行传递与保存对象时,保证对象的完整性和可传递性,通过将对象转化为有序字节流,从而便于其在网络上传输以及将其保存在本地文件中。
  • 反序列化的作用:反序列化的作用是根据字节流中保存的对象状态以及描述信息,通过反序列化重建对象。

  介绍完Json的表现形式与序列化、反序列化的定义与作用之后,接下来我们开始介绍序列化与反序列化的方式,C#中序列化和反序列化有以下三种方式,分别是:1、使用JavaScriptSerializer类;2、使用DataContractJsonSerializer类;3、使用JSON.NET类库。接下来,作者将用实例的方式,一一对以上这三种序列化与反序列化方式进行详细叙述。

  方式一:使用JavaScriptSerializer类

  使用JavaScriptSerializer类进行序列化与反序列化时,首先要引入System.Web.Script.Serialization命名空间,其在System.Web.Extensions.dll程序集中,下面将贴出具体的序列化与反序列化程序代码:

using System;using System.Web.Script.Serialization;namespace JsonSerializerAndDeSerializerTest{ class Program {  static void Main(string[] args)  {   //序列化操作   //实例化Student类   Student stu = new Student()   {    ID = 1,    Name="李磊",    Sex="男",    Age=22,    BirthDay="1990-08-22",   };   JavaScriptSerializer js = new JavaScriptSerializer();   string jsonData = js.Serialize(stu);//将对象转化为Json字符串   Console.WriteLine(jsonData);   //反序列化方式一:   string desJson = jsonData;   Student model = js.Deserialize<Student>(desJson); //将Json字符串转化为指定类型T的对象   string message = string.Format("ID={0},Name={1},Sex={2},Age={3},BirthDay={4}", model.ID, model.Name, model.Sex, model.Age,model.BirthDay);   Console.WriteLine(message);   Console.ReadKey();   ////反序列化方式二:   dynamic modelDy = js.Deserialize<dynamic>(desJson); //将Json字符串转化为指定类型T的对象   string messageDy = string.Format("动态的反序列化,ID={0},Name={1},Sex={2},Age={3},BirthDay={4}",    modelDy["ID"], modelDy["Name"], modelDy["Sex"],modelDy["Age"],modelDy["BirthDay"] ); //这里要使用索引取值,不能使用对象.属性   Console.WriteLine(messageDy);   Console.ReadKey();  } }}

  结果如下: