序列化与序列化

 

序列化就是将数据(比如属性与字段的值)以列外一种格式进行保存;序列化后只是将存储格式变了,实际内容其实没有变。

有序列化就会有反序列化;Json序列化(JavaScriptSerialize),XML序列化(XMLSerialize),二进制序列化;

这里主要总结一下二进制序列化

二进制序列化就是变成流的过程,就是把对象编成byte数组

 

        static void Main(string[] args)
        {
            person per = new person() { Name = "老杨", Age = 19, Email = "1111@qq.com" };

            //json序列化
            JavaScriptSerializer js = new JavaScriptSerializer();
            string strjson = js.Serialize(per);

            //xml序列化
            XmlSerializer xs = new XmlSerializer(typeof(person));
            using (FileStream fs = new FileStream("first.xml", FileMode.Create))
            {
                xs.Serialize(fs, per);
            }

            //1、创建二进制序列化器
            BinaryFormatter bf = new BinaryFormatter();
            //1.1创建一个文件流
            using (FileStream fs = new FileStream("person.bin", FileMode.Create))
            {
                //2、开始执行序列化
                bf.Serialize(fs, per);
            }
           
            Console.WriteLine("序列化完毕");
            Console.ReadKey();
        }

注意:

1、二进制序列化需要给对象前加上[Serializable]特性

2、要求被序列化的所有父类必须被标记为[Serializable]

3、要求被序列化的对象的类型中的属性、字段必须被标记为"可序列话的",也就是加上[Serializable],方法不参与序列化

4、要是想让一个字段不被序列化,在这个字段前加上[NonSerialized],注意是字段不是属性;属性是不能直接加的

 

 

反序列化

        static void Main(string[] args)
        {
            //创建序列化器
            BinaryFormatter bf = new BinaryFormatter();
            //打开文件流
            using (FileStream fs = new FileStream("person.bin",FileMode.Open))
            {
                //执行反序列化
                 person obj = bf.Deserialize(fs) as person;
                Console.WriteLine(obj.Name);
                Console.WriteLine(obj.Age);
                Console.WriteLine(obj.Email);
            }
            Console.WriteLine("反序列化完毕");
            Console.ReadKey();
        }

 

二进制反序列化注意:

必须获取序列化对象所在的程序集,因为二进制反序列化要根据序列化文件重新还原该对象,而序列化文件中只包含了一些数据信息,比如该对象继承了那些类与接口啊,里面有什么方法啊……这些信息在序列化文件中都不包含,需要根据对象所在的程序集来获取

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值