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; }
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件测试经验与教训

Python 异常处理

3134
来自专栏编舟记

命令行中 tree 的多重实现

652
来自专栏数据之美

java 利用反射模拟动态语言的 eval 函数

import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; impo...

1718
来自专栏desperate633

深入Redis的List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

863
来自专栏开发与安全

shell programming tutorial

可以直接 man bash 学习语法和相关命令。 一、什么是shell程序 以文件形式存放批量的Linux命令集合,该文件能够被Shell解释执行,这种文件就是...

1759
来自专栏码洞

会玩Go!会玩Python!嘭!Go-Python!

Golang是静态语言,性能很好,当它不那么灵活,不好在运行时动态运行代码。Python是动态语言,非常灵活,但是性能很差。古人云:“鱼和熊掌不能兼得”。但是如...

451
来自专栏Hongten

python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用

xml.etree.ElementTree模块实现了一个简单而有效的用户解析和创建XML数据的API。

714
来自专栏散尽浮华

Python介绍

Python概述 Python创始人是吉多.范罗苏姆。在1989年万圣节期间为打发时间而开发的。 目前Python在TIOBE排行榜第五位置 ? Python可...

18410
来自专栏Golang语言社区

【Golang语言社区】 Go语言中使用 Protobuf

安装 goprotobuf 1.从 https://github.com/google/protobuf/releases 获取 Protobuf 编译器 pr...

2523
来自专栏Python入门

Python存取文件方法有很多,但是这四种真的算的上是骚操作了

在不需要借助任何外界库的前提下,python内置方法其实也可以完成我们需要的文件存取任务,这里主要介绍几种python内置方法的使用方式,最后再给出一个实际案例...

1586

扫描关注云+社区