1.什么是JSON?
Json【javascript對象表示方法】,它是一個輕量級的數據交換格式,我們可以很簡單的來讀取和寫它,並且它很容易被計算機轉化和生成,它是完全獨立於語言的
2.Json支持下面兩種數據結構
- 鍵值對的集合--各種不同的編程語言,都支持這種數據結構;
- 有序的列表類型值的集合--這其中包含數組,集合,矢量,或者序列,等等。
3.Json有下面幾種表現形式
1對象
一個沒有順序的“鍵/值”,一個對象以花括號“{”開始,並以花括號"}"結束,在每一個“鍵”的后面,有一個冒號,並且使用逗號來分隔多個鍵值對
var user = "{'name':'Manas','gender':'Male','birthday':'1987-8-8'}";
2.數組
設置值的順序,一個數組以中括號"["開始,並以中括號"]"結束,並且所有的值使用逗號分隔
var user_Array = "[{'user': {'name':'Manas','gender':'Male','birthday':'1987-8-8'}}, {'user':{'name':'Mohapatra','Male':'Female','birthday':'1987-7-7'}}]";
3.字符串
任意數量的Unicode字符,使用引號做標記,並使用反斜杠來分隔。
var user_String = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}";
序列化和反序列化有三種方式:
- 使用
JavaScriptSerializer
類 - 使用
DataContractJsonSerializer
類 - 使用JSON.NET類庫
我們先來看看使用 DataContractJsonSerializer的情況的引用
//---------------------------------------------------------------------------------------------- //使用DataContractJsonSerializer方式需要引入的命名空間,在System.Runtime.Serialization.dll.中 using System.Runtime.Serialization.Json; //---
再看看使用JavaScriptJsonSerializer的情況的引用
//----------------------------------------------------------------------------------------- //使用JavaScriptSerializer方式需要引入的命名空間,這個在程序集System.Web.Extensions.dll.中 using System.Web.Script.Serialization; //-------------------------------------------------------------------------
最后看看使用JSON.NET的情況,引入類庫:
//使用Json.NET類庫需要引入的命名空間 //----------------------------------------------------------------------------- using Newtonsoft.Json; //-------------------------------------------------------------------------
最后實戰控制台代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Json; using System.IO; using System.Web.Script.Serialization; using Newtonsoft.Json; namespace Test_Control { public class Students { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } } class Test2 { static void Main(string[] args) { var user = "{'name':'Manas','gender':'Male','birthday':'1987-8-8'}"; var user_Array = "[{'user': {'name':'Manas','gender':'Male','birthday':'1987-8-8'}}, {'user':{'name':'Mohapatra','Male':'Female','birthday':'1987-7-7'}}]"; var user_String = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}"; #region 1.DataContractJsonSerializer方式序列化和反序列化 Students stu = new Students() { ID = 1, Name = "曹操", Sex = "男", Age = 1000 }; //序列化 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Students)); MemoryStream msObj = new MemoryStream(); //將序列化之后的Json格式數據寫入流中 js.WriteObject(msObj, stu); msObj.Position = 0; //從0這個位置開始讀取流中的數據 StreamReader sr = new StreamReader(msObj, Encoding.UTF8); string json = sr.ReadToEnd(); sr.Close(); msObj.Close(); Console.WriteLine(json); //反序列化 string toDes = json; //string to = "{\"ID\":\"1\",\"Name\":\"曹操\",\"Sex\":\"男\",\"Age\":\"1230\"}"; using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes))) { //js 反序列化為對象 JavaScriptSerializer jss = new JavaScriptSerializer(); var str_Object = jss.Deserialize<Students>(toDes); DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Students)); Students model = (Students)deseralizer.ReadObject(ms);//反序列化ReadObject Console.WriteLine("ID=" + model.ID); Console.WriteLine("Name=" + model.Name); Console.WriteLine("Age=" + model.Age); Console.WriteLine("Sex=" + model.Sex); } Console.ReadKey(); 答案 {"Age":1000,"ID":1,"Name":"曹操","Sex":"男"} ID=1 Name=曹操 Age=1000 Sex=男 #endregion #region 2.JavaScriptSerializer方式實現序列化和反序列化 Students stu = new Students() { ID = 1, Name = "關羽", Age = 2000, Sex = "男" }; JavaScriptSerializer js = new JavaScriptSerializer(); string jsonData = js.Serialize(stu);//序列化 Console.WriteLine(jsonData); //反序列化方式一: string desJson = jsonData; Students model = js.Deserialize<Students>(desJson);// //反序列化 string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex); Console.WriteLine(message); //反序列化方式2 dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化 string messageDy = string.Format("動態的反序列化,ID={0},Name={1},Age={2},Sex={3}", modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//這里要使用索引取值,不能使用對象.屬性 Console.WriteLine(messageDy); Console.ReadKey(); 答案 {"ID":1,"Name":"關羽","Age":2000,"Sex":"男"} ID=1,Name=關羽,Age=2000,Sex=男 動態的反序列化,ID=1,Name=關羽,Age=2000,Sex=男 #endregion #region 3.Json.NET序列化 List<Students> lstStuModel = new List<Students>() { new Students(){ID=1,Name="張飛",Age=250,Sex="男"}, new Students(){ID=2,Name="潘金蓮",Age=300,Sex="女"} }; //Json.NET序列化 string jsonData = JsonConvert.SerializeObject(lstStuModel); Console.WriteLine(jsonData); //Json.NET反序列化 string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}"; Students descJsonStu = JsonConvert.DeserializeObject<Students>(json);//反序列化 Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex)); Console.ReadKey(); 輸出結果 [{"ID":1,"Name":"張飛","Age":250,"Sex":"男"},{"ID":2,"Name":"潘金蓮","Age":300,"Sex":"女"}] 反序列化: ID=1,Name=C#,Sex=3000,Sex=女 #endregion } } }