序列化的基本操作

在实现反序列化的时候,上个DEMO直接将SQLconnection对象的创建写在了product的构造函数中,而在序列化时,再通过实现IDeserializationCallback接口重新创建SqlConnection对象,以此来还原对象状态。在Product构造函数和OnDeserialization()方法中,都硬编码了数据库连接字符串。

而更常见的情况时将SqlConnection的连接字符串保存在变量中:

如图:

序列化之后:

很多时候,数据库连接字符串属于敏感数据,我们并不希望它出现在序列化的文件中。

解决这个问题的一个办法是将连接字符串也标记为[NonSerialized],不过这样反序列化后对象的状态就不完整了。

方法二:

在序列化前将字符串进行加密,在反序列化后,对加密过的字符串进行还原。换言之,就是在序列化/反序列化的过程中注入一定的逻辑。

.NET提供了四个序列化,反序列化的特性标记来实现这一过程:

类中的写法如下:

调用的时候:

结果如下,序列化和反序列化一次执行方法如下:

调用后的结果与实现IDeserializationCallback接口的功能,可以看出,使用序列化的基本方法,还能保证序列化过程的安全性,因为对于这些特殊字符,我们可以在序列化过程中加入加密和解密算法,来保证信息不被非法窃取。

时间: 2024-10-10 13:03:03

序列化的基本操作的相关文章

Java—IO流 对象的序列化和反序列化

序列化的基本操作 1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 2.序列化流(ObjectOutputStream),writeObject 方法用于将对象写入输出流中: 反序列化流(ObjectInputStream),readObject 方法用于从输入流中读取对象. 3.序列化接口(Serializeable) 对象必须实现序列化接口,才能进行序列化,否则会出现异常.这个接口没有任何方法,只是一个标准. package com.test.io; import

MongoDB驱动特性检查列表

http://docs.mongodb.org/meta-driver/latest/legacy/feature-checklist-for-mongodb-drivers/ 1. 基本(Essential)- BSON序列化/反序列化- 基本操作: query, insert, update, remove, ensureIndex, findOne, limit, sort- 在需要的时候从游标(cursor)中获取更多数据(dbGetMore)- 当使用游标的用户完成操作时发送KillC

.Net——使用DataContractJsonSerializer进行序列化及反序列化基本操作

在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程.每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴. 进行序列化和反序列化的时候,主要用到对象DataContractJsonSerializer,然后再配合MemoryStream,就ok啦. 不多说,先来一版简单的+泛型的栗子,之后,我们会逐步改进: public static class JsonConvert { /// <summa

序列化与反序列化基本操作

一,为什么需要序列化 当程序运行时,需要访问和处理数据,在面向对象编程中,这些数据通常保存在对象中,当程序关闭或对象销毁时,这些数据需要保存到某处以便日后重建对象时能够还原对象的状态. 将对象及其状态保存起来,就称作序列化(Serialization),最简单和最常见的一种情况就是将对象及其状态保存在文件中: 而反序列化是序列化的反向操作,将文件还原为对象. 二,BinaryFormatter实现序列化 .net提供了一个接口和类如下表: IFormatters IFormatter中最重要的两

对象序列化和反序列化的基本操作

序列化之protobuf与avro对比(Java)

最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了protobuf的一些弊端,比如需要生成相应的文件类,和业务绑定太紧密,所以在看了AVRO之后发现它完美解决了这个问题. 下面记录下对这两种序列化工具的入门与测评. 一.protobuf基本操作 protobuf简介: Protocol Buffers (a.k.a., protobuf) are Goo

Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目

【转载】Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目

一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子

一个简单的NoSQL内存数据库—Berkeley DB基本操作的例子 最近,由于云计算的发展,数据库技术也从结构式数据库发展到NoSQL数据库,存储模式从结构化的关系存储到现在如火如荼的key/value存储.其中Berkeley DB就是上述过程中的一个比较有代表性的内存数据库产品,数据库的操作是通过程序来实现的,而不是SQL语句.特别是当今数据不断动态增加的过程中,试图 通过数据切割来达到扩充的思路已经行不通了,因为事先不知道客户数据格式,因此服务提供商不可能进行数据切割.而无模式的key/