序列化、反序列化

文章详细介绍了如何在.NET环境中使用BinaryFormatter进行对象的序列化和反序列化。通过示例代码展示了如何将Staff对象转换为.dat文件,以及如何从.dat文件恢复对象。序列化用于将对象转换为字节流便于存储或传输,而反序列化则用于从字节流重建对象。
摘要由CSDN通过智能技术生成

序列化:在 .NET 中,可以通过使用序列化器(Serializer)来实现对象的序列化。序列化器可以将对象转换为字节流,以便在网络上传输、存储到文件中或在应用程序之间传递。

反序列化:在 .NET 中,可以使用 System.Runtime.Serialization.Formatters.Binary 命名空间中的 BinaryFormatter 类,将一个对象序列化成 .dat 文件,也可以将 .dat 文件反序列化为对象。

反序列化的过程如下:

1.创建一个 FileStream 对象,将 .dat 文件作为输入流。

2.创建一个 BinaryFormatter 对象。

3.使用 BinaryFormatter 的 Deserialize 方法,从 FileStream 中将对象反序列化出来。

4.关闭 FileStream 对象。

using System;
using System.Runtime.Serialization.Formatters.Binary;

namespace Serializable { 

    [Serializable]
    public class Staff
    {
        int No { get; set; }
        string Name { get; set; }
        bool Sex { get; set; }

        //未序列化
        [NonSerialized]
        string Job;

        public Staff()
        {
        }

        public Staff(int no, string name, bool sex, string job)
        {
            No = no;
            Name = name;
            Sex = sex;
            Job = job;
        }

        public override string ToString()
        {
            return "工号:" + No + "\t姓名:" + Name + "\t性别:" + (Sex ? "男":"女") + "\t工作:" + Job;
        }
    }

    public class Program
    {
        static void Main(string[] arge)
        {
            //-----------序列化    对象-》data.dat文件-------------
            // 创建一个对象并设置其属性
            Staff staff = new Staff(1,"xiao_ming",true,"开发/测试");

            // 创建一个二进制序列化器
            BinaryFormatter formatter = new BinaryFormatter();

            // 打开一个文件流,将对象序列化到文件中
            using (FileStream stream = new FileStream("data.dat", FileMode.Create))
            {
                formatter.Serialize(stream, staff);
                /*这是一个将一个 List 对象序列化并写入到指定流中的操作,使用的是 BinaryFormatter 类。BinaryFormatter 类是 .NET Framework 中的一个类,它可将对象序列化为二进制流,也可以将二进制流反序列化为对象。这个操作可以将一个对象持久化到磁盘或者网络中,以便稍后再次使用。需要注意的是,List 中所有的对象必须是可序列化的。
                 * List<Staff> list = new List<Staff>();
                 * list.Add(new Staff(1,"xiao_ming",true,"开发/测试"));
                 * formatter.Serialize(stream, list);
                 */
            }

            Console.WriteLine("Object serialized to file.");

            //-----------反序列化   data.dat文件-》对象-------------

            Staff myStaff = new Staff();
            FileStream fileStream = new FileStream("data.dat", FileMode.Open);
            myStaff = (Staff)formatter.Deserialize(fileStream);//myStaff = {工号:1	姓名:xiao_ming	性别:男	工作:}
            fileStream.Close();
        }
    }
}

输出的data.dat文件

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值