反序列化和序列化

将对象转换为字节序列的过程称为对象的序列化。

将字节序列恢复为对象的过程称为对象的反序列化。

1)它可以将对象序列化成字节永久保存在硬盘中。

2)在网络上传送对象的字节序列。

.net为我们提供了三种序列化方式:

【1】、XML Serializer

【2】、SOP Serializer

【3】、BinarySerializer

要使一个类可以序列化,必须对类标记Serializable。

例子:

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

namespace ConsoleApplication2
{
    class Program
    {
       
        static void Main(string[] args)
        {
            Class1 c = new Class1();
            c.id = 1;
            c.uname = "admin";
            c.upwd = "admin";
            filepath = @"E:\ff.xml";
            XMLXMLSeria(c);
            Class1 c1 = XMLUnSeria();
            
        }

        /// <summary>
        /// 二进制序列化
        /// </summary>
        /// <param name="cc">标记为序列化的类</param>
        static void Seria(Class1 cc)
        {
            File.WriteAllText(filepath, "");
            IFormatter format = new BinaryFormatter();
            Stream str = new FileStream(filepath, FileMode.Append, FileAccess.Write, FileShare.None);
            format.Serialize(str, cc);
            str.Close();
        }

        /// <summary>
        /// 二进制反序列化
        /// </summary>
        /// <returns>返回序列化的类</returns>
        static Class1 UnSeria()
        {
            IFormatter format = new BinaryFormatter();
            Stream str = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.None);
            Class1 cd = (Class1)format.Deserialize(str);
            str.Close();
            return cd;
        }

        /// <summary>
        /// xml序列化
        /// </summary>
        /// <param name="cc">标记为序列化的类</param>
        static void XMLXMLSeria(Class1 cc)
        {
            File.WriteAllText(filepath, "");
            XmlSerializer format = new XmlSerializer(cc.GetType());
            Stream str = new FileStream(filepath, FileMode.Append, FileAccess.Write, FileShare.None);
            format.Serialize(str, cc);
            str.Close();
        }

        /// <summary>
        /// xml反序列化
        /// </summary>
        /// <returns>返回序列化的类</returns>
        static Class1 XMLUnSeria()
        {
            Class1 cd = new Class1();
            XmlSerializer format = new XmlSerializer(cd.GetType());
            Stream str = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.None);
            cd = (Class1)format.Deserialize(str);
            str.Close();
            return cd;
        }

        public static string filepath
        {
            get;
            set;
        }
     
      
    }
}

 

class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    [Serializable]
   public class Class1
    {
        public int id
        {
            get;
            set;
        }
        public string uname
        {
            get;
            set;
        }
        public string upwd
        {
            get;
            set;
        }

    }
}

 

二进制的bin序列化速度最快。

posted @ 2010-08-26 17:15  二锅头  阅读(243)  评论(0)    收藏  举报