码迷,mamicode.com
首页 > Web开发 > 详细

Json的序列化和反序列化

时间:2016-07-24 11:54:22      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

一.什么是Json:

   Json【javascript对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成

二.Json的表现形式:

  1. 对象:
    • var user = {"name":"fxhl","gender":"Male","qq":"1123166772"}
  2. 数组:
    • var userlist = [{"user":{"name":"fxhl","gender":"Male"}}, 


      {"user":{"name":"Mohapatra","Male":"Female"}]

  3. 字符串:
    • 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来序列化和反序列化,性能好。

 

Json的序列化和反序列化

标签:

原文地址:http://www.cnblogs.com/fengxuehuanlin/p/5700282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!