C#序列化和反序列化 .

来源:互联网 发布:集体智慧编程 编辑:程序博客网 时间:2024/06/01 21:49
序列化是将对象状态转换为可保持或传输的格式的过程

例如,可以序列化一个对象,然后使用HTTP通过Internet在客户端和服务器之间传输该对象。反之,

反序列化根据流重新构造对象

反序列化将流转换为对象

序列化和反序列化过程结合起来,可以轻松的存储和传输数据

什么情况下手使用序列化和反序列化

永久存储
将对象的状态永久保存在存储媒体中,一边可以在以后重新创建精确的副本


值封送
通过值将对象从一个应用程序域发送到另一个应用程序域中


.NET框架提供的序列化技术
通过将对象序列化剪贴板,可在不同的应用程序之间共享对象
可以将对象序列化到流、磁盘、内存和网络等等
远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象


XML序列化
将对象的公共字段和属性或者方法的参数和返回值序列化为符合特定XML架构定义语言(XSD)文档的

XML流。XML序列化生成强类型的类,并为存储或输出目的将其公共属性和字段转换为序列XML格式
提供或使用数据而不限制使用该数据的应用程序时使用xml序列化
XML序列化不包括类型信息
注意:XML序列化不转换方法、索引器、似有字段或只读属性(只读集合除外)。要序列化对象的所

有字段和属性(公共的和私有的),请使用二进制序列化

以下是一个二进制序列化和反序列化的实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace SerializeHelper
{
    public class MySerizlize
    {
        //二进制序列化
        public MemoryStream SerialzeMenory(Object obj)
        {
            BinaryFormatter serialzer = new BinaryFormatter();
            MemoryStream memoryStream = new MemoryStream();
            serialzer.Serialize(memoryStream, obj);
            return memoryStream;
        }

        public byte[] ObjectToByte(Object obj)
        {
            MemoryStream menory = this.SerialzeMenory(obj);
            return menory.ToArray();
        }

        //二进制反序列化
        public Object DeSerializeMenory(MemoryStream menoryStream)
        {
            menoryStream.Position = 0;
            BinaryFormatter deserialzer = new BinaryFormatter();
            Object obj = deserialzer.Deserialize(menoryStream);
            menoryStream.Close();
            return obj;
        }

        public object ByteToObject(Byte[] buffer)
        {
            MemoryStream menoryStream = new MemoryStream(buffer);
            return  this.DeSerializeMenory(menoryStream);
        }
    }
}