zoukankan      html  css  js  c++  java
  • Json序列化和反序列化的几种方法

    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();

    原文地址:http://www.cnblogs.com/yinhaichao/archive/2012/04/02/2430281.html

  • 相关阅读:
    html/form表单常用属性认识
    css复杂动画(animation属性)
    css样式水平居中和垂直居中的方法
    css简单动画(transition属性)
    html/css中map和area的应用
    html/css弹性布局的几大常用属性详解
    webpack优化配置
    webpack配置详解
    使用Node.js搭建一个简单的web服务器(二):搭建一个简单的服务器
    使用Node.js搭建一个简单的web服务器(一):Node.js入门
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2435309.html
Copyright © 2011-2022 走看看