一.什么是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 Person 16 { 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);// //反序列化ReadObject 25 Console.WriteLine(model.name); 26 } 27 Console.ReadKey(); 28 } 29 } 30 [DataContract] 31 public class Person 32 { 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 Person 20 { 21 public Person user { get; set; } 22 public string name { get; set; } 23 public int age { get; set; } 24 }
总结:最后还是尽量使用JSON.NET来序列化和反序列化,性能好。
时间: 2024-10-18 01:15:14