当前位置: 首页 > news >正文

VB.net序列化和反序列化的使用方法和实用场景

引言

相信很多初学编程的人都会提出过这个疑问:“既然我的变量可以存在内存之中,那么是否也可以存在硬盘之中呢”

其实我想回答的是,完全可以而且方法不止一种,而今天讲的是序列化最经典的——二进制序列化

由于序列化的部分已经被新的.net弃用了,但是你只要明确一点,弃用不代表不可以用,以下是教学步骤

1、编写类型,或者是结构或者是一个变量

在存储单个.net变量时,一般都是被.NET程序员标记为可序列化的,然而自己写的类的变量则需要在类的头上加上这么一句话

<Serializable>

否则你将会看到这种情况

2、实操一下(序列化)

Imports System.IO
Imports System.Runtime.Serialization.Formatters.BinaryModule Module1Sub Main()DoDim a As String = "qwert"Dim b As New Class1Select Case Console.ReadLine()Case 1Dim fs = New FileStream("J:\桌面文件\a.bin", FileMode.Create)Dim bf = New BinaryFormatterbf.Serialize(fs, a)fs.Close()Case 2Dim fs = New FileStream("J:\桌面文件\b.bin", FileMode.Create)Dim bf = New BinaryFormatterbf.Serialize(fs, b)fs.Close()End SelectLoopEnd SubEnd Module
<Serializable>
Class Class1Dim a As String = "asd"Dim b As String = "dfg"
End Class

但是,请你注意,如果你是WinForm的开发者你将会面临一个新的问题:

翻译过来就是已经被弃用了,需要加一个标签来阻止报错 #Disable Warning SYSLIB0011

即(示例代码,被标记后的代码都会隐藏此报错代码的错误)

#Disable Warning SYSLIB0011Public Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.ClickDim fs = New FileStream(Application.StartupPath & "\Layer.bin", FileMode.Create)Dim bf = New BinaryFormatterbf.Serialize(fs, Layers)fs.Close()End SubPublic Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.ClickDim fs = New FileStream(Application.StartupPath & "\Layer.bin", FileMode.Open)Dim bf = New BinaryFormatterDim l = bf.Deserialize(fs)Layers = lreLoad()fs.Close()End Sub

很好,此时你的变量已经被存在桌面了

3、打开(反序列化)

和序列化一样,非常简单

Imports System.IO
Imports System.Runtime.Serialization.Formatters.BinaryModule Module1Sub Main()DoDim a As String = "qwert"Dim b As New Class1Select Case Console.ReadLine()Case 1'''               Case 2'''Case 3Dim fs = New FileStream("J:\桌面文件\a.bin", FileMode.Open)Dim bf = New BinaryFormatterDim a1 = bf.Deserialize(fs)Console.WriteLine(a1)fs.Close()Case 4Dim fs = New FileStream("J:\桌面文件\b.bin", FileMode.Open)Dim bf = New BinaryFormatterDim b1 = bf.Deserialize(fs)Console.WriteLine(b1)fs.Close()End SelectLoopEnd SubEnd Module
<Serializable>
Class Class1Dim a As String = "asd"Dim b As String = "dfg"
End Class

输入2后,输入4的结果(由于并没有对class1做内部值的提取,故返回类名)

 

4、应用场景

1、在游戏

角色的位置,角色的状态,物体的状态都可以通过序列化来保存,方便第二次登录时的读取,唯一不方便的是后期数据出错维护起来麻烦(程序员可以编写对应类型的编辑器程序来维护这些可能出错的文件)

2、Socket网络编程

在进行.net的网络通信中,一个一个字节头文件识别起来非常麻烦,而且出错几率极高,而直接使用序列化后的文件传输将会大大减少编程难度和出错几率

3、对于特定类型文件的存储

例如我开发了一个CAD交互系统,我想存储所有的CAD变量,那么最简单的就是直接把自己编写的CAD类存在用户的计算机内,方便下一次修改和使用

相关文章:

  • xray-poc编写示例
  • Java 泛型参数问题:‘ResponseData.this‘ cannot be referenced from a static contex
  • GoogleTest:简单示例及ASSERT/EXPECT说明
  • 【编译原理】第四章 习题
  • pandas读取Excel数据(.xlsx和.xls)到treeview
  • 传感器的精度,灵敏度等概念介绍
  • terraform实现本地加密与解密
  • vue3内置组件Suspense的使用
  • 在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
  • Nginx 核心功能02
  • WGCLOUD使用 - 如何监控RabbitMQ运行参数
  • Python10天冲刺-设计模型之策略模式
  • 机器学习经典算法:用决策树原理优化新能源汽车续航能力
  • 【Redis】String详细介绍及其应用场景
  • 深度学习系统学习系列【1】之基本知识
  • npm宿主依赖、宿主环境依赖(peerDependencies)(指由宿主环境提供的依赖)
  • Ubuntu20.04如何优雅的安装ROS 1(胎教级教程)
  • Ocelot与.NETcore7.0部署(基于腾讯云)
  • loads、dumps、jsonpath使用场景
  • 上位机知识篇---二进制操作
  • 乘客被困停滞车厢超4小时,哈尔滨铁路局客服:列车晚点,表示歉意
  • 五一首日出沪高峰,G1503高东收费站上午车速约30公里/小时
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 内蒙古公开宣判144件毁林毁草刑案,单起非法占用林地逾250亩
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应
  • 太好玩了!坐进大卫·霍克尼的敞篷车进入他画笔下的四季