VB.net进阶:如何实现序列化

本文尽量用最简单的例子来介绍如何做序列化。

序列化的基本方式如下图:将对象送给Formatter,Formatter将其序列化之后会形成一个流。这个流可以是文件流,或者其他的。

+-------------+
+------+ | | Serialize +----------+
|Object|===>| Formatter |------------------>| Stream |
+------+ | | +----------+
+-------------+

在这里,我们将一个随机生成的数组进行二进制序列化,并保存到文件;然后把它从文件当中取出,进行反序列化重新得到这个数组。

首先是定义数组:
Dim nums(10) As Integer

然后是生成数组内容:
Dim i As Integer
For i = 0 To 10
nums(i) = Int(Rnd() * 500) + 100
Next

序列化是通过Formatter对象来实现的。我们要新建一个Formatter对象:
Dim sfFormatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
BinaryFormatter是进行二进制序列化的。其它的序列化方式你可以在Runtime.Serialization.Formatters中找到。

我们还要有一个流来作为序列化的输出:
Dim fStream As New FileStream(“1.dat”, FileMode.Create)

准备工作完了,现在可以调用Formatter的Serialize方法来进行序列化了:
sfFormatter.Serialize(fStream, nums)

最后不要忘了关闭流:
fStream.Close()

反序列化的方式大同小异,只不过调用的是Formatter的Deserialize方法。代码是这样的:
Private Sub Deserialize()
Dim fStream As New FileStream(“1.dat”, FileMode.Open)
Dim sfFormatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
nums = sfFormatter.Deserialize(fStream)
fStream.Close()
End Sub

序列化就这么简单。这里只是序列化整数数组。如果你要对自定义类的对象进行序列化,你需要在类的定义前面加上:
<Serializable()>

对于序列化还有更高级的应用,比方你可以指定类中的哪些成员不能被序列化,以及定义自己的序列化接口。本文到此为止。想了解更多的话,去找 MSDN 吧!

时间: 2024-08-01 15:36:18

VB.net进阶:如何实现序列化的相关文章

VB.net进阶:VB.net下的Sniffer

改写后的代码分成两部分:Receiver,用来侦听:PacketInfo,对数据包进行简单的解析.数据包的内容是通过Receiver的DataReceived事件返回来的.每个函数都不长,容易看懂,注释我就--咳咳. Imports System.NetImports System.Net.SocketsImports System.Threading Public Class Receiver Dim buffer As Byte() Dim mvarBufferLength As Integ

在Python中marshal对象序列化的相关知识

  这篇文章主要介绍了在Python中marshal对象序列化的相关知识,是Python进阶学习中序列化相关的知识,需要的朋友可以参考下 有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上.Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle等等.今天就讲讲marshal模块. 注意: marshal并不是一个通用的模块,在某些时候它是一个不被推荐使用的模块,因为使用marshal序列化的二进制数据格

ASP向SQL语句(不是存储过程)传递参数

存储过程|语句 四年前写的一个内容管理系统,应用在公司内部网上,昨天DBA说其中的SQL语句未使用参数化的调用,导致服务器负担加重,资源占用大.并列出了几个占用资源较大的语句,类似如下:SELECT ART_ID, ART_TITLE, ... FROM USR_NEWS.VIEW_ARTICLE WHERE ART_ISPASSED='Y' and ART_CLASS=4066 ORDER BY ART_PASSTIME DESC其中where子句中的ART_CLASS的值是先确定后组合好这样

ASP进阶:VB中的模块,类,ActiveX与API的使用

active|activex 这几天搞了点c/s结构的程序设计, 由于ASP用得比较熟练,所以VB6.0自然成为我首选的开发工具. 在学习过程中,我结合自己的经验总结下VB中的一些高级应用,并且体会这种应用给我们所带来的好处. 一.模块 (Module) 在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用.这是初步的提高代码可复用性的途径.我想有经验的ASP(VBSCRIPT,以后都只用VBScript来写Asp程序)程序员都用过<!--#Include file="&q

我的Android进阶之旅------&amp;gt;经典的大牛博客推荐(排名不分先后)!!

今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超博客 Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN博文精选:Android系列开发博客资源汇总 - CSDN.NET - CSDN资讯 Android笔记本--半年来的研究笔记,导航. - 思想实践地 - CSDN博客 [魏祝林]Android中级教程 - Androi

SUNWEN教程之----C#进阶3

教程 SUNWEN教程之----C#进阶(三)mrfat@china.com  终于又到一个白天了,起床,伸个懒腰,又坐到了电脑前面.今天我要向大家讲的是C#的数组(Arrays).C#中的数组和其它一些优秀的语言一样,也是从0开始计的,这从我们以前的例子里可以看出来,也就是说,一个数组的第一个元素是a[0],而不是像VB的a(1).虽然是这样,但是你还是要注意一些区别. 在声明一个数组的时候,方括号必须跟在类型后面,而不能跟在变量名后面,如:int[] table; //不能写成int tab

把握VB.NET中的流FileStream

stream 当你第一次用VB.NET读写文件的时候,你肯定会发现VB.NET摒弃了传统的文件I/O支持,感觉不习惯.其实,在.NET里面,微软用丰富的"流"对象取代了传统的文件操作,而"流",是一个在Unix里面经常使用的对象. 我们可以把流当作一个通道,程序的的数据可以沿着这个通道"流"到各种数据存储机构(比如:文件,字符串,数组,或者其他形式的流等).为什么我们会摒弃用了那么久的IO操作,而代之为流呢?其中很重要的一个原因就是并不是所有的数

SUNWEN教程之----C#进阶1

教程 SUNWEN教程之----C#进阶(零)mrfat@china.com  写在前面的话 在写这些文章之前,我对C#一无所知.只从前辈那里听说了一些,说他很像JAVA.因为我这段时间一直在看JAVA,结果什么明堂没看出来(只能怪我太笨:),其实我想还是没有实践的机会),所以就很想换换口味.其实很早就听说了C#,想看一看这个东东,只是上M$的网站一看,.NET的东东要一百多兆呢!看了就怕,何况全部下载下来,要费我一整张电话卡呢?幸好我一个朋友先把.NET下载下来了,我拿了硬盘就跑过去拷过来了.

VB的API编程精粹

编程 第一节:API基础 API说到底就是一系列的底层函数,是系统提供给 用户用于进入操作系统核心,进行高级编程的途径.通 过在Visual Basic应用程序中声明外部过程就能够 访问Windows API(以及其它的外部DLLs).在声明 了过程之后,调用它的方法与调用Visual Basic自 己的过程相同.要声明一个DLL过程,需要在代码窗 口的"声明"部分增加一个Declare语句,如果该过 程返回一个值,应将其声明为Function.例如: Declare Function