.net对象二进制序列化

来源:互联网 发布:linux 怎么搭建lamp 编辑:程序博客网 时间:2024/06/01 10:05

1、  序列化:把对象变成二进制数组,

前提:

对象必须标记为可序列化的,创建类时,在类加[Serializable]标记为可序列化的,如果这个类有父类,那么父类也必须标记为可序列化

使用序列化,尽量不要用自定属性,因为自动属性每次编译时,生成的字段名可能不一样。

2、  反序列化:把二进制数据转化成实际对象

一、执行反序列化前,由于要对对象进行反序列化,所以需要引用对象对应的类的命名空间(程序集),必须是原来的程序集,就算重写一个一摸一样的类也是不行的,只能把原来的程序集引入

二、序列化时,只序列化了一些状态和字段信息,方法和和类是没有序列化的

三、计算机之间智能传输数据,不能直接传输对象,所以需要把对象转化为数据然后(网络、文件流)在进行传输

3、  实例练习1:

1>    把类中的对象存在磁盘上

2>    方法一.把数据存在磁盘上,下次要用时,把数据读出来、在创建对象赋值

3>    方法二.直接把对象存在磁盘上,下次用时直接把对象拿出来用

一.创建二进制序列化器,BinaryFormatter

二.开始执行序列化,Serialize

把对象二进制序列化

class Program

    {

        static void Main(string[] args)

        {

            Person p =new Person() {Name ="cyw", Age = 23, No = 1106655030 };

            #region 把类中数据存入文件中

            //1、方法一File

            //File.WriteAllLines("2.txt", new string[] {"No:" + p.No.ToString(), "Name:" + p.Name, "Age:"+ p.Age.ToString() });

            //2、方法二StreamWriter对象

            //using (StreamWriter stWrite = newStreamWriter("1.txt"))

            //{

            //   stWrite.WriteLine(p.No);

            //   stWrite.WriteLine(p.Name);

            //   stWrite.WriteLine(p.Age);

            //}

            #endregion

            #region 对对象进行序列化,把整个对象那存入磁盘中。

            //1、创建对象序列化器

            BinaryFormatter bft =new BinaryFormatter();

            //2、创建文件流

            using (FileStream file =new FileStream("3.bin",FileMode.Create))

            {

                //3、进行序列化,通过序列化器btf,把对象p序列化到3.bin

                bft.Serialize(file,p);

            }

            #endregion

            Console.WriteLine("OK");

            Console.ReadKey();

        }

    }

    [Serializable]

    public class Person

{类的内容,省略}


反序列化

namespace _8_17_3反序列化

{

    class Program

    {

        static void Main(string[] args)

        {

            //1、引入源对象的命名空间(程序集)

            //2、创建对象序列化器

            BinaryFormatter bft =new BinaryFormatter();

            //3、创建文件流

            using (FileStream fst =new FileStream("3.bin",FileMode.OpenOrCreate))

            {

                object ob =bft.Deserialize(fst);

                Person p = (Person)ob;

                Console.WriteLine(p.ToString());

            }

            Console.ReadKey();

        }

    }

}

0 0
原创粉丝点击