.Net中JSON序列化和反序列化

来源:互联网 发布:greg laswell 知乎 编辑:程序博客网 时间:2024/05/09 15:50


.Net中有多种对象序列化的方式,如XML序列化,Binary序列化及JSON序列化。

JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,是一种高效的数据编码格式,可用于在客户端浏览器和支持AJAXweb服务之间快速交换少量数据。和XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后产生的数据体积小。

本文主要介绍 .Net中的JSON序列化和反序列化。

准备工作:

定义要进行序列化的对象Person

public class Person

    {      

        public int Id { get;set; }       

        public string Name {get; set; }       

        public int Age { get;set; }

    }

 

实例化对象

Person personOne = new Person(){

                Id = 1,

                Name ="Kate",

                Age = 18

            };

 

            Person personTwo =new Person()

            {

                Id = 2,

                Name ="Eva",

                Age = 20

            };

 

            List<Person>PersonList = new List<Person>() { personOne, personTwo };

 

序列化反序列化Demo

           //序列化反序列化对象

            string jsonStr =JsonHelper.Serialize<Person>(personOne);

            Person person =JsonHelper.Deserialize<Person>(jsonStr);

           Console.WriteLine(jsonStr);

           Console.WriteLine("Id=" + person.Id + "Name=" +person.Name + "Age" + person.Age);

 

           //序列化反序列化list

            string jsonListStr= JsonHelper.Serialize<List<Person>>(PersonList);

            List<Person>persons = JsonHelper.Deserialize <List<Person>>(jsonListStr);

           Console.WriteLine(jsonListStr);

            persons.ForEach(x=>

            {

               Console.WriteLine("Id=" + x.Id + "Name=" + x.Name +"Age=" + x.Age);

            });

 

           Console.ReadLine();

.Net中有三种常用的方式,分别是:

方法一:使用System.Runtime.Serialization.Json.DataContractJsonSerializer

Note:适用于.Net Framework3.5及以后版本

如果不想序列化某个字段或者属性,可以加上[IgnoreDataMember]

  1. Add referenceSystem.Runtime.Serialization
  1. Add namespaceSystem.Runtime.Serialization.Json;  System.Runtime.Serialization;
  2. 定义方法实现序列化和反序列化

public class JsonHelper

    {

       //序列化

        public static stringSerialize<T>(T t)

        {

           DataContractJsonSerializer serializer = newDataContractJsonSerializer(typeof(T));

            using(MemoryStreamstream = new MemoryStream())

            {

               serializer.WriteObject(stream, t);

                string jsonStr= Encoding.UTF8.GetString(stream.ToArray());

                returnjsonStr;

            }

        }

 

       //反序列化

        public static TDeserialize<T>(string jsonStr)

        {

           DataContractJsonSerializer serializer = newDataContractJsonSerializer(typeof(T));

            using(MemoryStreamstream = new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))

            {

                T obj =(T)serializer.ReadObject(stream);

                return obj;

            }

        }

    }

  1. 输出结果

 

方法二:使用System.Web.Script.Serialization.JavaScriptSerializer

Note:适用于.Net Framework3.5及以后版本

如果不想序列化某个字段或者属性,可以加上[JsonIgnore]

  1. Add referenceSystem.Data.DataSetExtensions
  2. Add namespaceSystem.Web.Script.Serialization;
  3. 定义方法实现序列化和反序列化

public class JsonHelper

    {

        public static stringSerialize<T>(T t)

        {

           JavaScriptSerializer jss = new JavaScriptSerializer();

            string jsonStr =jss.Serialize(t);

            return jsonStr;

        }

 

        public static TDeserialize<T>(string jsonStr)

        {

           JavaScriptSerializer jss = new JavaScriptSerializer();

            T t =jss.Deserialize<T>(jsonStr);

            return t;

        }

    }

  1. 输出结果

 

方法三:使用Newtonsoft.Json.JsonConvert

此类是一个非微软提供的JSON序列化和反序列化的开源免费类库。

  1. install Netonsoft.Json with nuget

  1. Add namespace Newtonsoft.Json;
  1. 定义方法实现序列化和反序列化

public class JsonHelper

    {

        public static stringSerialize<T>(T t)

        {

            string jsonStr =JsonConvert.SerializeObject(t);

            return jsonStr;

        }

 

        public static TDeserialize<T>(string jsonStr)

        {

            T t =JsonConvert.DeserializeObject<T>(jsonStr);

            return t;

        }

    }

 

  1. 输出结果

 

在使用中更加推荐JSON.Net,因为JSON.Net更加灵活更加快捷,比DataContractJsonSerializer快50%,比JavaScriptSerializer快250%。


reference:

https://msdn.microsoft.com/zh-cn/library/bb410770(v=vs.110).aspx

http://www.newtonsoft.com/json

http://blog.csdn.net/zhoufoxcn/article/details/6254657


0 0