zoukankan      html  css  js  c++  java
  • -串行化与反串行化

    -串行化与反串行化

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

    在取消串行化时,对象会被还原,且不能与其原实例区别开来。只需给类添加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; }
        }
    复制代码
     
     
  • 相关阅读:
    修改Echarts 图表的坐标轴的文本的排列位置
    dataTable组件使用
    jeecg使用uploadify上传组件
    session属性的清除和非法登录
    Freemaker模板指令
    Freemarker的循环通过assign指令引入计数变量
    测试计划模板
    python+requests接口自动化测试框架实例详解教程(米兔888)
    jmeter(二十二)内存溢出原因及解决方法
    Jmeter(四)_逻辑控制器详解
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3247458.html
Copyright © 2011-2022 走看看