JSON(JavaScript object Notation),轻量级的数据交换格式。 

        也就是说我们可以在前台使用JS将Json数据传到后台,处理后再返回前台。它可以完成不同格式的数据进行交换。就像我们经常写的AJAX传递数据一样。我们在Controller中返回JsonResult类型的值,然后用JSON接收json类型的数据。

   下面我们从JSON的语法,结构以及生成和解析三方面来进行讲解。 

       【语法】 

        JSON和JavaScript具有相同的语法,它是ECMAScript的一个子集。

         语法规则:

         1、数据以键值对的格式存储;

         2、数据由逗号分隔;

         3、JSON值可以为 Number,String,Boolean,Object,Array,Null 

  【结构】 

       JSON包含两种结构:一种是Object,一种是Array。   

Object:{"name":"Cindy","age":25}
       Array:[{"name":"cindy","age":23},{"name":"bill","age":23}]

            JSON有一个特点就是:数据中可以包含对象,对象中也可以包含数组,也就是所谓的嵌套格式。 

  【JSON的解析和生成】

         此实例是用Visual Studio 2012中的C#语言来编写的。在.Net中有两种工具来帮助我们对JSON进行解析和生成,它们分别是:Json.Net,Script.Serialization。

         下面我们就以上两种工具,分别讲解一下JSON的解析和生成。

 

    一、Script.Serialization

          首先,我们要添加引用 system.web.Extensions。然后在.cs文件中添加Using system.web.script.serialization以及using system.IO对JSON进行写入和读取。

          先定义一个Person实体类:              

class Person
    {
        public string name { get; set; }
        public int age { get; set; }
        public override string ToString()
        {
            returnstring.Format("Name:{0}\nAge:{1}", name, age);
 
        }
 
    }

           1、生成JSON 

class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person() {name="Cindy",age=23};
            JavaScriptSerializer ser = newJavaScriptSerializer();
            string outputJSON =ser.Serialize(p1);
           File.WriteAllText("Output.json",outputJSON );
            Console.Write(p1);
        }
    }

            2、解析JSON

class Program
    {
        static void Main(string[] args)
        {
             JavaScriptSerializer ser = newJavaScriptSerializer();
             string JSONString =File.ReadAllText("Output.json");
            Person p2 =ser.Deserialize<Person>(JSONString);
            Console.Write(p2);
        }
    }

    二、Json.NET    

    我们要添加Nuget中的Json.net包,然后,添加Using Newtonsoft.Json。   

      1、生成JSON(也就是将对象转化成Json字符串),称为JSON序列化       

class Program
    {
        static void Main(string[] args)
        {
 
            Person p2 =new Person() { name="cindy",age=23};
            string outputJson =JsonConvert.SerializeObject(p2);
           File.WriteAllText("Output.json",outputJson);
            Console.WriteLine(p2);
        }
}

     2、解析JSON(也就是将JSON字符串转换成对象)也称JSON反序列化 

class Program
    {
        static void Main(string[] args)
        {
           stringJSONString = File.ReadAllText("Output.json");
          Person p1 =JsonConvert.DeserializeObject<Person>(JSONString);
            Console.WriteLine(p1);
        }
}

   【总结】

    从代码上来看,使用JSON.NET要比使用JavaScriptSerialize简单一些,它不用实例化什么类,直接用JsonConvert就可以完成对JSON的序列化和反序列化工作。 JSON.NET 的性能好,通用性好,并且有齐全的API。目前用JSON.net工具来对JSON进行序列化和反序列化。

    PS:在做课表的时候,写传值代码需要将后台传过来的值转为JSON格式的数据,传给前台。于是就学了一点关于JSON的内容,看MVA讲的JSON视频,做了些简单的例子,算是对JSON的一个初步了解吧。在视频的讲解过程中,谈到了JSON和XML的区别,为什么我们不用XML而用JSON。

    我做了两个关于JSON和XML储存数据的例子