在C#中,Json的序列化和反序列化的几种方法总结

时间:2021-08-06 07:48:42

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write and easy for machines to parse and generate. JSON is a text format that is completely language independent. 

翻译:Json【javascript东西暗示要领】,它是一个轻量级的数据交换格局,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的。

在C#中,Json的序列化和反序列化的几种方法总结

Json撑持下面两种数据布局:

键值对的调集--各类差此外编程语言,都撑持这种数据布局;

有序的列表类型值的调集--这此中包罗数组,调集,矢量,或者序列,等等。

Json有下面几种表示形式

     1.东西

  一个没有挨次的“键/值”,一个东西以花括号“{”开始,并以花括号"}"结束,在每一个“键”的后面,有一个冒号,并且使用逗号来分隔断绝分手多个键值对。例如:

      var user = {"name":"Manas","gender":"Male","birthday":"1987-8-8"}   

     2.数组

设置值的挨次,一个数组以中括号"["开始,并以中括号"]"结束,并且所有的值使用逗号分隔断绝分手,例如:

var userlist = [{"user":{"name":"Manas","gender":"Male","birthday":"1987-8-8"}}, 
{"user":{"name":"Mohapatra","Male":"Female","birthday":"1987-7-7"}}]

     3.字符串

任意数量的Unicode字符,使用引号做符号,并使用反斜杠来分隔断绝分手。例如:

var userlist = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}" 

好了,介绍完JSON,此刻说正题,我们事先序列化和反序列化有三种方法:

1.使用JavaScriptSerializer类

2.使用DataContractJsonSerializer类

3.使用JSON.NET类库

我们先来看看使用 DataContractJsonSerializer的情况

DataContractJsonSerializer类辅佐我们序列化和反序列化Json,他在措施集 System.Runtime.Serialization.dll下的System.Runtime.Serialization.Json定名空间里。

首先,这里,我新建一个控制台的措施,,新建一个类Student

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization; namespace JsonSerializerAndDeSerializer { [DataContract] public class Student { [DataMember] public int ID { get; set; } [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string Sex { get; set; } } }

注意:上面的Student实体中的契约 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必需要加的,对付其他两种方法不必加,也可以的。

我们措施的代码:

要先引用措施集,在引入这个定名空间

//---------------------------------------------------------------------------------------------- //使用DataContractJsonSerializer方法需要引入的定名空间,在System.Runtime.Serialization.dll.中 using System.Runtime.Serialization.Json; //--------------------------------------------------------------------------------------------

#region 1.DataContractJsonSerializer方法序列化和反序列化 Student stu = new Student() { ID = 1, Name = "曹操", Sex = "男", Age = 1000 }; //序列化 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student)); 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))) { DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student)); Student model = (Student)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(); #endregion

运行之后功效是:

在C#中,Json的序列化和反序列化的几种方法总结

再看看使用JavaScriptJsonSerializer的情况: