標籤:
一.什麼是Json:
Json【javascript對象表示方法】,它是一個輕量級的資料交換格式,我們可以很簡單的來讀取和寫它,並且它很容易被電腦轉化和產生
二.Json的表現形式:
- 對象:
- var user = {"name":"fxhl","gender":"Male","qq":"1123166772"}
- 數組:
var userlist = [{"user":{"name":"fxhl","gender":"Male"}},
{"user":{"name":"Mohapatra","Male":"Female"}]
- 字串:
- var userlist = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}"
三.Json序列化和還原序列化的三種方式
1.使用JavaScriptSerializer類:
//使用JavaScriptSerializer方式需要引入的命名空間,這個在程式集System.Web.Extensions.dll.中
using System.Web.Script.Serialization;
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //序列化操作 6 JavaScriptSerializer jss = new JavaScriptSerializer(); 7 var json = new { name = "fxhl", age = 23 }; 8 string str = jss.Serialize(json); 9 //還原序列化操作10 Person person = jss.Deserialize<Person>(str);11 Console.WriteLine(person.name);12 }13 } 14 [Serializable] 15 public class Person16 {17 public string name { get; set; }18 public int age { get; set; }19 }
2.使用DataContractJsonSerializer類:
//Person實體中的契約 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和還原序列化必須要加的
//使用DataContractJsonSerializer方式需要引入的命名空間,在System.Runtime.Serialization.dll.中
using System.Runtime.Serialization.Json;
1 static void Main(string[] args) 2 { 3 //序列化操作 4 Person p1 = new Person() 5 { 6 name = "fxhl", 7 age = 23 8 }; 9 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Person));10 MemoryStream msObj = new MemoryStream();11 //將序列化之後的Json格式資料寫入流中12 js.WriteObject(msObj, p1);13 //從0這個位置開始讀取流中的資料14 msObj.Position = 0; 15 StreamReader sr = new StreamReader(msObj, Encoding.UTF8);16 string json = sr.ReadToEnd();17 Console.WriteLine(json);18 sr.Close();19 msObj.Close();20 //還原序列化操作21 using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))22 {23 DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Person));24 Person model = (Person)deseralizer.ReadObject(ms);// //還原序列化ReadObject25 Console.WriteLine(model.name);26 }27 Console.ReadKey();28 }29 }30 [DataContract] 31 public class Person32 {33 [DataMember]34 public string name { get; set; }35 [DataMember]36 public int age { get; set; }37 }
3.使用JSON.NET類庫:
引入類庫:
//使用Json.NET類庫需要引入的命名空間
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //序列化操作 6 var json = new { user = new { name = "fxhl", age = 23 }}; 7 string jsonData = JsonConvert.SerializeObject(json); 8 Console.WriteLine(jsonData); 9 //還原序列化操作方法一10 Person p1= JsonConvert.DeserializeObject<Person>(jsonData);11 Console.WriteLine(p1.user.name);12 //還原序列化操作方法二13 string json2 = "[{\"user\":{\"name\":\"fxhl\",\"age\":23}}]";14 List<Person> listp2= JsonConvert.DeserializeObject<List<Person>>(json2);15 Console.WriteLine(listp2[0].user.name);16 Console.ReadKey();17 }18 }19 public class Person20 {21 public Person user { get; set; }22 public string name { get; set; }23 public int age { get; set; }24 }
總結:最後還是盡量使用JSON.NET來序列化和還原序列化,效能好。
Json的序列化和還原序列化