JSON

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

字号+ 作者:H5之家 来源:H5之家 2016-07-26 10:03 我要评论( )

本文是对在C#中,Json的序列化和反序列化的几种方式总结的讲解,对学习C#编程技术有所帮助,与大家分享。

[摘要]本文是对在C#中,Json的序列化和反序列化的几种方式总结的讲解,对学习C#编程技术有所帮助,与大家分享。

在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化Json数据到对象。

什么是JSON?

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对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语言的。

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

运行之后结果是:

再看看使用JavaScriptJsonSerializer的情况:

JavaScriptSerializeris a class which helps toserialize and deserialize JSON. It is present in namespaceSystem.Web.Script.Serializationwhich is available in assemblySystem.Web.Extensions.dll.To serialize a .Net object to JSON string useSerialize method. It's possible to deserialize JSON string to .Net object usingDeserialize<T>orDeserializeObjectmethods. Let's see how to implement serialization and deserialization using JavaScriptSerializer.

这里要先引用

//----------------------------------------------------------------------------------------- //使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中 using System.Web.Script.Serialization; //---------------------------------------------------------------------------------------- #region 2.JavaScriptSerializer方式实现序列化和反序列化 Student stu = new Student() { ID = 1, Name = "关羽", Age = 2000, Sex = "男" }; JavaScriptSerializer js = new JavaScriptSerializer(); string jsonData = js.Serialize(stu);//序列化 Console.WriteLine(jsonData); ////反序列化方式一: string desJson = jsonData; //Student model = js.Deserialize<Student>(desJson);// //反序列化 //string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex); //Console.WriteLine(message); //Console.ReadKey(); ////反序列化方式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(); #endregion

结果是:

最后看看使用JSON.NET的情况,引入类库:

下面的英文,看不懂可略过。。。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • GSON实现Java对象的JSON序列化与反序列化的实例教程

    GSON实现Java对象的JSON序列化与反序列化的实例教程

    2016-06-28 13:00

  • serialize序列化和json

    serialize序列化和json

    2016-05-26 10:04

  • C#序列化和反序列化综合案例

    C#序列化和反序列化综合案例

    2016-05-08 14:06

  • DataSnap与JSON序列化3

    DataSnap与JSON序列化3

    2016-01-18 18:00

网友点评
i