zoukankan      html  css  js  c++  java
  • 序列化和反序列化

    一、概述

    何为序列化和反序列化?

    我们再传递数据的和保存数据时,我们可以用一个变量记录,但是如果是一个对象改怎么办呢,这是就得用序列化和反序列化。

    在计算机中,数据的存放都是二进制。我们传递数据也是传递二进制,根据这个不变性,我们把需要传递的变量序列化成一个二进制的数据保存并传递,再通过反序列化,就能够得到原来的对象。

    下面是一个实现序列化和反序列化的例子,我们通过特殊属性定义了一个  [Serializable]class myobject,在myobject中又有一个  [NoSerializable]的变量age

    通过变量传递后,我们发现,age的值是默认值0,而不是23.

    这说明,只有实现了序列化的变量/值,才能被传递,其他的不能。

        class Program
        {
            static void Main(string[] args)
            {
                Byte[] myArray = Seriliaze(new myObject());
                Console.WriteLine(DeSeriliaze(myArray));
                Console.ReadKey();
            }
    
            /// <summary>
            /// 序列化程序
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
             static Byte[] Seriliaze(myObject obj)
            {
                ///IFormatter 提供将序列化对象格式化的功能
                ///BinaryFormatter 用二进制方式序列化或反序列化一个对象
                IFormatter formatter = new BinaryFormatter();
                using (MemoryStream stream = new MemoryStream())
                {
                    formatter.Serialize(stream, obj); //将对象序列化成一个内存流
                    return stream.ToArray();          //将内存流放入一个字节数组,并返回
                }
    
            }
             /// <summary>
             /// 序列化程序
             /// </summary>
             /// <param name="obj"></param>
             /// <returns></returns>
             static myObject DeSeriliaze(Byte[] byteArray)
             {
                 ///IFormatter 提供将序列化对象格式化的功能
                 ///BinaryFormatter 用二进制方式序列化或反序列化一个对象
                 IFormatter formatter = new BinaryFormatter();
                 //将字节数组放到内存流中
                 using (MemoryStream stream =new MemoryStream(byteArray))
                 {
                     return (myObject)formatter.Deserialize(stream); //将内存流反序列化成一个对象返回
                         
                 }
             }
            }
            /// <summary>
            /// 一个用来测试序列化的类
            /// </summary>
            [Serializable]
            class myObject
            { 
               String name = "nimei";
              [NonSerialized]
                int age = 23;
    
                public myObject()
                { 
            
                }
    
                public override string ToString()
                {
                     return String.Format("my name is {0};age is {1}",name,age);
                }
        
            }
    

      二、详细

         实现序列化的方法有哪些呢?

    在.net中是先序列化的方法有:BinaryFormatter,SoapFormatter,XmlSerilizer

    http://www.cnblogs.com/ejiyuan/archive/2009/01/21/1379256.html 这里讲的比较清楚,大家可以参考

  • 相关阅读:
    RabbitMq学习4-发布/订阅(Publish/Subscribe)
    RabbitMq学习3-工作队列(Work queues)
    《大型网站技术架构》-读书笔记七:安全架构
    RabbitMq学习2-php命令行模式测试rabbitmq
    《大型网站技术架构》-读书笔记六:可扩展架构
    RabbitMq学习1-介绍、安装和配置
    《大型网站技术架构》-读书笔记五:伸缩性架构
    C#构建树形数据结构
    数据结构和算法(一)概念
    C# 简介
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3305950.html
Copyright © 2011-2022 走看看