zoukankan      html  css  js  c++  java
  • .net 中序列化和反序列化的使用

    序列化的目的:将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

    序列化

    序列化分为JSON 序列化,XML序列化,二进制序列化

    准备工作,新建一个Person类

    1    [Serializable]
    2     public class Person
    3     {
    4         public string Name { get; set; }
    5         public int Age { get; set; }
    6     }

    该类用[Serializable]标签表示为可序列化

    准备工作,创建该类的示例

    1   Person p = new Person() { Name = "张三", Age = 25 };

    一,JSON序列化和反序列化

     1,JSON序列化

    1    /*json序列化*/
    2    var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    3    var str = javaScriptSerializer.Serialize(p);

    结果:

    2,JSON反序列化

    1             /*json 反序列化*/
    2             var jsonObject = javaScriptSerializer.Deserialize(str, p.GetType());
    3             Console.WriteLine((jsonObject as Person).Name);
    4             Console.Read();

    3,JSON序列化还有一种方式

    1  /*json序列化*/
    2             DataContractJsonSerializer dcjs = new DataContractJsonSerializer(p.GetType());
    3             MemoryStream ms = new MemoryStream();
    4             dcjs.WriteObject(ms, p);
    5             var s = Encoding.UTF8.GetString(ms.ToArray());
    6             ms.Close();
    7             /*反序列化*/
    8             MemoryStream ms1 = new MemoryStream(Encoding.UTF8.GetBytes(s));
    9             var objPerson = dcjs.ReadObject(ms1) as Person;

      使用这个类的时候,会在序列化的JSON字符串带有 K__BackingFideId 前缀

      如下图;

     当Person 类中没有[Serializable] 标签的时候一切都恢复正常了

    二,XML序列化和反序列化

     1   /*xml序列化*/
     2             FileStream fsXml = new FileStream("1.xml", FileMode.Create, FileAccess.ReadWrite);
     3             System.Xml.Serialization.XmlSerializer xsl = new XmlSerializer(p.GetType());
     4             xsl.Serialize(fsXml, p);
     5             fsXml.Dispose();
     6 
     7             /*xml反序列化*/
     8             FileStream fsDeXml = new FileStream("1.xml", FileMode.Open, FileAccess.ReadWrite);
     9             var Xmlobj = xsl.Deserialize(fsDeXml);
    10             fsDeXml.Dispose();

    三,二进制序列化和反序列化

     1             /*二进制序列化*/
     2             FileStream fsBin = new FileStream("2.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
     3             BinaryFormatter bf = new BinaryFormatter();
     4             bf.Serialize(fsBin, p);
     5             fsBin.Dispose();
     6 
     7             /*二进制反序列化*/
     8             FileStream fsBinDes = new FileStream("2.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
     9             BinaryFormatter bfDes = new BinaryFormatter();
    10             var binObject = bfDes.Deserialize(fsBinDes);
    将不朽的青春献给伟大的编程事业,世界将因我们而改变!
  • 相关阅读:
    hdu 1022 Train Problem I 模拟
    Eclipse plugin开发 —实现语法高亮
    一篇英文版的eclipse插件textEditor资料
    (转)Eclipse常用快捷键
    Eclipse plugin开发 —实现单行与多行注释
    Eclipse plugin开发 —实现文本内容帮助
    CSS borderstyle
    ClassLoader getResource
    javascript add table content from xml
    postgres 当前时间
  • 原文地址:https://www.cnblogs.com/luoyefeiwu/p/3650432.html
Copyright © 2011-2022 走看看