• Json序列化和反序列化的几种方法


    首先先定义一个Person类,用于序列化和反序列化

        public class Person
          {
              string name;

              public string Name
              {
                  get { return name; }
                  set { name = value; }
              }
              DateTime time;

              public DateTime Time
              {
                  get { return time; }
                  set { time = value; }
              }

          }

         //方法1(使用DataContractJsonSerializey方法)
                //必须首先引用命名空间(using System.Runtime.Serialization.Json;来自引用程序集System.ServiceModel.Web),还要引用命名空间(using System.Runtime.Serialization来自引用程序集System.Runtime.Serialization)
                //因为DataContractJsonSerializey继承了XmlObjectSerializer类,所以必须要引用System.Runtime.Serialization命名空间
                //序列化(普通数据)
                Person person = new Person();
                person.Name = "殷海超";
                person.Time = Convert.ToDateTime("2012-01-01");
                MemoryStream ms = new MemoryStream();//定义内存流
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));//初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象(这里是Person类型)
                ser.WriteObject(ms, person);//使用DataContractJsonSerializer 的WriteObject方法将Person写入流

                ms.Position = 0;//让流的初始位置位于0
                StreamReader sr = new StreamReader(ms);//这是把写入流的序列化好的数据读取出来,供查看
                Console.WriteLine(sr.ReadToEnd());


                //反序列化(普通数据)
                ms.Position = 0;
                Person personread = (Person)ser.ReadObject(ms);//使用DataContractJsonSerializer 的ReadObject方法将流ms读取出来反序列化为Person类型的数据
                Console.WriteLine("{0}{1}", personread.Name, personread.Time);//输出

                Console.ReadLine();

        //序列化(List<T>)
                List<Person> list = new List<Person>();
                list.Add(new Person() { Name = "殷海超", Time = Convert.ToDateTime("2012-01-01") });
                list.Add(new Person() { Name = "王琪", Time = Convert.ToDateTime("2012-01-01") });

        //或者List<Person> list = new List<Person>(){
          new Person() { Name = "殷海超", Time = Convert.ToDateTime("2012-01-01") },
          new Person() { Name = "王琪", Time = Convert.ToDateTime("2012-01-01") }
         }
                MemoryStream ms = new MemoryStream();
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<Person>));//(这里是List<Person>类型)
                ser.WriteObject(ms, list);

                ms.Position = 0;
                StreamReader sr = new StreamReader(ms);
                Console.WriteLine(sr.ReadToEnd());
                //反序列化(List<T>)
                ms.Position = 0;
                List<Person> personread = (List<Person>)ser.ReadObject(ms);
                Console.WriteLine("{0}{1}", personread[0].Name, personread[0].Time);
                Console.WriteLine("{0}{1}", personread[1].Name, personread[1].Time);
                Console.ReadLine();

         //方法2(使用JavaScriptSerializer类)
                //使用JavaScriptSerializer类,引用命名空间是using System.Web.Script.Serialization;添加引用程序集System.Web.Extensions(在 System.Web.Extensions.dll 中)    

        //序列化
         Person person = new Person();
                person.Name = "殷海超";
                person.Time = Convert.ToDateTime("2012-01-01");
                JavaScriptSerializer js = new JavaScriptSerializer();
                string strJSON = js.Serialize(person);
                Console.WriteLine(strJSON);

        //反序列化
                Person t = js.Deserialize<Person>(strJSON);
                Console.WriteLine(t.Name + t.Time);
                Console.ReadLine();


                //方法3使用Newtonsoft.Json.dll
       
    //下载地址http://json.codeplex.com 要引用using Newtonsoft.Json;using Newtonsoft.Json.Converters;

        //序列化
                Person person = new Person();
                person.Name = "殷海超";
                person.Time = Convert.ToDateTime("2012-01-01");
                string strJSON = JsonConvert.SerializeObject(person);
                Console.WriteLine(strJSON);

        //反序列化
                Person t = JsonConvert.DeserializeObject<Person>("{Name:\"殷海超\",Time:\"2012-03-07\"}");
                Console.WriteLine(t.Name + t.Time);
                Console.ReadLine();

  • 相关阅读:
    【BZOJ4915】简单的数字题(数学)
    【BZOJ2140】稳定婚姻(匈牙利算法板子题)
    【BZOJ2739】最远点(决策单调性)
    【AT3526】[ARC082C] ConvexScore(贡献转化+容斥)
    【CF1264D2】Beautiful Bracket Sequence(组合数学)
    【洛谷2561】[AHOI2002] 黑白瓷砖(Polya定理)
    【洛谷3511】[POI2010] MOS-Bridges(混合图欧拉回路)
    【洛谷4226】避难所(构造)
    【洛谷7453】[THUSCH2017] 大魔法师(线段树+矩乘)
    【洛谷3207】[HNOI2010] 物品调度(置换问题)
  • 原文地址:https://www.cnblogs.com/yinhaichao/p/2430281.html
Copyright © 2020-2023  润新知