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

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

在取消串行化时,对象会被还原,且不能与其原实例区别开来。只需给类添加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; }
    }

 

时间: 2024-09-20 02:14:21

C#基础知识回顾--串行化与反串行化的相关文章

详解PHP对象的串行化与反串行化_php实例

什么时候使用串行化? 在网络中传输对象的时候 向数据库中保存文件的时候 今天我们要提到四个函数 全部串行化 1.serialize(对象名) 将指定的类对象串行化 $str=serialize($per) //将per对象串行化,结果返回给$str 2.unserialize(串行化后的返回值) 返回结果是对象 $per=unserialize($str); 局部串行化 3.__sleep() 串行化某对象的部分属性. 4.__wakeup()反串行化时,初始化(其实是修改)对象内容 前两个的使

《非常网管:网络管理从入门到精通(修订版)》——第1章 网络基础知识回顾1.1 计算机网络基础

第1章 网络基础知识回顾 古语云:"练武不练功,到老一场空",学习网络的基础理论就像练功一样重要.本章主要介绍网络的基础.网络的体系结构.ISO/OSI(International Standard Organization/Open System Interconnection,国际标准化组织提出的开放系统互联)参考模型.TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议),其间穿插大量的实验和技巧,有

php 面向对象详解_对象的串行化和反串行化

  第七章(11)面向对象详解_对象的串行化和反串行化 串行化就是把对象转化成二进制的字符串 (要串行化的对象名称). 反串行化就是把二进制化字化为对象 unserilize(要反串行化的对象名称). 符串转串行化标准: $r1=new Ren("张三",20,"男"); $str=($r1<要串行化的对象>); $file=fopen("tmp.txt"<串行化保存到的文件地址>,"w"<写&g

《CCNP SWITCH 300-115学习指南》——第1章 基础知识回顾

第1章 基础知识回顾CCNP SWITCH 300-115学习指南在正式进入CCNP SWITCH这门针对园区网交换技术的课程之前,我们首先快速地回顾一遍CCNA中的相关知识点并简要地介绍其中部分技术,以便于本书内容的理解.由于这里提到的所有技术都是独立存在的,如生成树或虚拟LAN(VLAN),因此本章将这些基础知识汇总到一起进行复习,并且在后续章节中将不再重复类似的基础讲解. 如果读者十分了解交换术语,并对交换技术有着基本的认识,建议跳过此章,直接从第2章开始阅读. 本章涵盖如下CCNA基础交

【JavaScript】javaScript基础知识回顾

我们首先对JavaScript的基础进行回顾. 1.浏览器的对象树 总浏大纲,还是要先看浏览器的对象树: 如1.1浏览器的对象树.png 2.window对象常用方法 alert('信息'):      消息框 prompt('提示信息',默认值): 标准输入框 confirm( ):      确认框 open( ):      打开一个新窗口 close( ):     关闭窗口 3.Form表单对象 访问表单的方式:     *  document.forms[n]     *  docu

C#基础知识回顾-- 反射(3)

  获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇"怎样在程序集中使用反射", 其他没有什么可以写的了,前两篇主要是铺垫,在实际应用中,主要是最后两篇.其实写完反射, 我也考虑重新把委托重新写下,现在想想确实太过单一和简单了.我会把实际开发中委托的例子多写几个 , 以便以理解.如果这几篇C#的基础对您有所帮助的话,请点击推荐.谢谢您的支持-- 好了,不废话了,在前面例子中,由于MyClass类型的对象是显示创建的,因此使 用反射技术来调用My

关于C#基础知识回顾--反射

其实说白了,反射就是能知道我们未知类型的类型信息这么一个东西.没什么神秘可讲!反射的核心是System.Type.System.Type包含了很多属性和方法,使用这些属性和方法可以在运行时得到类型信息   反射(reflection)是一种允许用户获得类型信息的C#特性.术语"反射"源自于它的工作方式: Type对象映射它所代表的底层对象.对Type对象进行查询可以获得(反射)与类型相关的信息.反射是一种 功能强大的机制,它允许学习和使用只在运行时才能知道的类型功能. 这些是官方定义,

PHP基础知识回顾_php基础

header("Content-Type:text/html;charset=UTF-8"); $conn = mysql_connect('localhost','root','');//链接服务器(非永久性) if(!$conn){ echo '<hr/>'; die('error:'.mysql_error()); }else{ echo '<hr/>'; echo '链接服务器:'.$conn; } $db = mysql_select_db('test

C#基础知识回顾-- 反射(1)

反射(reflection)是一种允许用户获得类型信息的C#特性.术语"反射"源自于它的工作方式: Type对象映射它所代表的底层对象.对Type对象进行查询可以获得(反射)与类型相关的信息.反射是一种 功能强大的机制,它允许学习和使用只在运行时才能知道的类型功能. 这些是官方定义,其实说白了,反射就是能知道我们未知类型的类型信息这么一个东西.没什么神秘可讲! 反射的核心是System.Type.System.Type包含了很多属性和方法,使用这些属性和方法可以在运行时得到类型信息.