序列化part1

.net开发之余,经常发现类上方有一个属性[Serializable].当时很是好奇,同事也经常问我,于是乎自己调查吧,终于领悟,跟大家分享。

Serializable:顾名思义序列化。用[Serializable]修饰类表示该类可以序列化。那么什么是序列化呢?

序列化就是将对象的状态信息转换为可以存储或传输的Object的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

 序列化的目的:

1.   以某种存储形式使自定义对象持久化;(关于持久化一会儿再说)

2.   将对象从一个地方传递到另一个地方(详细见序列化part2)。

.NET Framework 提供两种序列化技术:

1.   二进制序列化,保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。

2.   XML序列化,仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据而言,这是一个很好的选择。

说了这么多,还不如来个例子更通俗易懂。

下面说个2进制序列化的例子。

//表示Book类可以序列化

 [Serializable]
    public class Book
    {
        private string name;
        private float price;
        private string author;

        public Book(string bookname, float bookprice, string bookauthor)
        {
             this.name = bookname;
             this.price = bookprice;
             this.author = bookauthor;
        }
        public string Name
        {
            get
            {
                return this.name;
            }
        }
        public float Price
        {
            get
            {
                return this.price;
            }
        }
        public string Author
        {
            get
            {
                return this.author;
            }
        }
    }

//程序入口Main函数

public class Start
    {
        static void Main(string[] args)
        {

//生成一个Book类的实例
            Book book = new Book("Day and Night", 30.0f, "Bruce");

//将book对象序列成2进制文件保存在F:/book.dat中。打开book.dat会出现乱码
            using (FileStream fs = new FileStream(@"F:/book.dat", FileMode.Create))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(fs, book);//二进制序列化
            }
            book = null;

//从F:/book.dat中将Book类的实例book反序列化。
            using (FileStream fs = new FileStream(@"F:/book.dat", FileMode.Open))
            {
                BinaryFormatter formatter = new BinaryFormatter();
                book=(Book)formatter.Deserialize(fs);
            }
            Console.WriteLine("BookName:" + book.Name);
            Console.WriteLine("BookPrice:" + book.Price.ToString());
            Console.WriteLine("BookAuthor:" + book.Author);
        }

    }

结果:

BookName:Day and Nigh
BookPrice:30
BookAuthor:Bruce

通过例子可以看出来,将对象的信息保存在文件中,以后使用时只需反序列化即可还原数据。

上面关于对象的持久化,我来说一说

简单的讲,“持久化” 持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值