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 条评论
登录 后参与评论

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2070
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4928
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5566
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2812
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4045
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2192
来自专栏魂祭心

原 canvas绘制clock

4164

扫码关注云+社区