欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 序列化与反序列化

程序员文章站 2022-06-16 08:26:24
...

序列化:将对象转化为二进制,方便存储和数据交换。

byte[ ]是任何数据的最根本表示形式,任何数据最终都是二进制的。 

反序列化:将二进制转换为对象

目的:传输数据(网络中传输数据的形式)


方法:

1、将要 序列化对象的类,标记为可被序列化的;在类的上面标记[serializable]

2、只有被[serializable]标记的类创建的对象才可以被序列化;但是这个类不可以被继承。

3、BinaryFormatter 用来序列化二进制;调用序列化的函数:.Serialize( )

通过一个流将一个二进制文件写入到指定目的;再进过反序列化读取文件


using System.IO;  //流所在的命名空间

using System.Runtime.Serialization.Formatters.Binary;  // 序列化所在的命名空间

=======================================================================

序列化
            father fa1 = new father();
            fa1.Name = "dad";
 
            fa1.Profession = "peasant";
            string path = @"C:\Users\Administrator\Desktop\a.txt";

            using(FileStream filw=new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write  ))
           {
            // 将对象序列成二进制,开始序列化对象
             BinaryFormatter bf = new BinaryFormatter();//
             bf.Serialize(filw,fa1);   // 序列化对象,通过流自动将内容写入到文件中
 
            }
---------------------------------------------------------------------------------------------------------------------------------------------------------
反序列化

            // 接受对方发过来的数据,反序列话为对象
             father ff;
            using(FileStream filr=new FileStream (path,FileMode.OpenOrCreate ,FileAccess .Read ))
            {           
                BinaryFormatter bby = new BinaryFormatter();
                ff=(father)bby.Deserialize(filr);  //  反序列话deserialize,返回的类型为object
            }


        [Serializable ]  // 只有被[serializable]标记的类创建的对象才可以被序列化
         public class father {
             string _name;
         public string Name
         {
            get { return _name; }
            set { _name = value; }
         }
         string _profession;
         public string Profession
        {
            get { return _name; }
            set { _name = value; }
         }
         void word() 
        {
            Console.WriteLine("This is a class");
         }