C#基础知识回顾--串行化与反串行化

来源:互联网 发布:营销软件网站源码 编辑:程序博客网 时间:2024/05/16 05:46

串行化是指存储和获取磁盘文件、内存或其他地方中的对象。在串行化时,所有的实例数据都保存到存储介质上,

在取消串行化时,对象会被还原,且不能与其原实例区别开来。只需给类添加Serializable属性,就可以实现串行化实

的成员。反串行化是串行化的逆过程,数据从存储介质中读取出来,并赋给类的实例变量。串行化能保存现有对象的所有状态,

我想我们以前见过的一些游戏的角色账户中的dat文件应该就是被串行化的结果。我尝试了打开一个dat文件,果真得到了

我需要的信息,一些角色的等级之类的信息果然在里面。

   串行化对象,需要先将对象加上[Serializable],如:

复制代码
   [Serializable]    public class User    {        public string Name { get; set; }        public string Password { get; set; }    }
复制代码

      串行化其实很简单,下面看个例子:

首先需要添加序列化命名空间:

using System.Runtime.Serialization.Formatters.Binary;

我们将一个用户对象进行序列化并存储到一个文件中:

复制代码
   private static void AddUser()        {            User user = new User();            user.Name = "admin";            user.Password = "123";            using (Stream input = File.OpenWrite("user.dat"))            {                BinaryFormatter bf = new BinaryFormatter();                bf.Serialize(input, user);            }        }
复制代码

取出这个对象同样很简单,看代码:

复制代码
    public static bool VaildateUser(string pwd)        {                       using (Stream outPut = File.OpenRead("user.dat"))            {                BinaryFormatter bf = new BinaryFormatter();                User user = bf.Deserialize(outPut) as User;                if (user != null)                {                    return pwd == user.Password;                }            }            return false;        }
复制代码

呵呵,是不是很简单。在进行串行化的时候,对象被转换成二进制保存到文件中。

 

如果需要对部分字段序列化部分不序列化时,我们可以按照如下设置实现

复制代码
  [Serializable]    public class User    {        public string Name { get; set; }        public string Password { get; set; }    [NonSerialized]        public string Greate{ get; set; }    }
复制代码