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

C# 二进制序列化和反序列化示例

.NET框架提供了两种种串行化的方式:

1、是使用BinaryFormatter进行串行化;

2、使用XmlSerializer进行串行化。

        第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储。可以使用[Serializable]属性将类标志为可序列化的。如果某个类的元素不想被序列化,1、可以使用[NonSerialized]属性来标志,2、可以使用[XmlIgnore]来标志。

        序列化意思指的是把对象的当前状态进行持久化,一个对象的状态在面向对象的程序中是由属性表示的,所以序列化类的时候是从属性读取值以某种格式保存下来,而类的成员函数不会被序列化,.net存在几种默认提供的序列化,二进制序列化,xml和json序列化会序列化所有的实例共有属性。

        这里简单介绍:BinaryFormatter以二进制格式序列化和反序列化对象。

        BinaryFormatte序列化:将对象转化成二进制,BinaryFormatte反序列化就是将二进制转化为对象;

        命名空间: System.Runtime.Serialization.Formatters;

        最常用的两个方法:

                Deserialize(Stream)     将指定的流反序列化成对象

                Serialize(Stream, Object)     将对象序列化到给定的流

        两个常用的属性:

                Serializable     表示可以被序列化

                NonSerializable     屏蔽被序列化

**************************************************************************************************************

 简单示例:

namespace Model
{[Serializable]public class Config{    [NonSerialized]  // 表示下面这个age字段不进行序列化private int age{ get; set; }public string Language { get; set; }public bool IsAutoBackup { get; set; }public int BackupTimeForHour { get; set; }public string LastTimeRestoreDBFile { get; set; }public DateTime? LastAutoBackupDateTime { get; set;}public bool IsSupportHis { get; set; }//序列化 fileName:文件地址public void SaveTo(string fileName){using (MemoryStream ms = new MemoryStream()){BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(ms, this);File.WriteAllBytes(fileName, ms.ToArray());}}//反序列化public static DSConfig LoadFromFile(string fileName){try{if (!File.Exists(fileName))return null;else{byte[] buff = File.ReadAllBytes(fileName);using (MemoryStream ms = new MemoryStream(buff)){BinaryFormatter formatter = new BinaryFormatter();return (DSConfig)formatter.Deserialize(ms);}}}catch (Exception ex){}return null;}}
}

调用示例

private const string CONFIGNAME = "b1b4af87-1870-11e9-a31b-8cec4b4fece0.cfg";
public static string ConfigName = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Viewer",CONFIGNAME);
Config config = Config.LoadFromFile(ConfigName);
//对Config类里面参数赋值后保存
Config.SaveTo(ConfigName);

************************************************************************************************************** 

BinaryFormatte序列化,示例二:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Binaryformats
{internal class Program{private static void Main(string[] args){Person p = new Person();p.Sex = 1;p.Age = 21;p.Name = "dfr";byte[] serBytes = BinaryFormat.Serialize(p); //序列化Person pp = (Person) BinaryFormat.Deserialize(serBytes); //反序列化,object类转化成自己定义的Console.WriteLine(pp.Name);Console.ReadLine();}[Serializable]private class Person //用Serializable做了标记,标识可以被序列化{private int _age;[NonSerialized] private string _name; //用NonSerialized做了标记,标识该字段屏蔽序列化private int _sex;public string Name{get { return _name; }set { _name = value; }}public int Sex{get { return _sex; }set { _sex = value; }}public int Age{get { return _sex; }set { _sex = value; }}}}public class BinaryFormat{public static byte[] Serialize(Object Urobject) //序列化 返回byte[]类型{BinaryFormatter bf = new BinaryFormatter();MemoryStream memory = new MemoryStream();//使用using 可以避免忘记释放bf.Serialize(memory, Urobject);byte[] bytes = memory.GetBuffer();memory.Close();return bytes;//或者采用方法:using (MemoryStream ms = new MemoryStream(buff)){}}public static object Deserialize(byte[] bytes) //反序列化,返回object类型的{BinaryFormatter bf = new BinaryFormatter();MemoryStream memory = new MemoryStream(bytes);object ss = bf.Deserialize(memory);memory.Close();return ss;}}
}

**************************************************************************************************************

相关文章:

C# 二进制序列化和反序列化示例

.NET框架提供了两种种串行化的方式: 1、是使用BinaryFormatter进行串行化; 2、使用XmlSerializer进行串行化。 第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储。可以使用[Serializable]属…...

【CSS】文字扫光 | 渐变光

码来 可调整角度与颜色值来改变效果 <p class"gf-gx-color">我是帅哥</p> <style>.gf-gx-color {background: -webkit-linear-gradient(135deg,red,red 25%,red 50%,#fff 55%,red 60%,red 80%,red 95%,red);-webkit-text-fill-color: transparen…...

Overhaul Distillation(ICCV 2019)原理与代码解析

paper&#xff1a;A Comprehensive Overhaul of Feature Distillation official implementation&#xff1a;GitHub - clovaai/overhaul-distillation: Official PyTorch implementation of "A Comprehensive Overhaul of Feature Distillation" (ICCV 2019) 本文的…...

<Linux开发>驱动开发 -之-内核定时器与中断

&#xff1c;Linux开发&#xff1e;驱动开发 -之-内核定时器与中断 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过程详…...

希尔贝壳邀您参加2023深圳国际人工智能展览会

2023深圳国际人工智能展览会“AIE”将于2023年5月16-18日在深圳国际会展中心 (宝安)举办&#xff0c;希尔贝壳受邀参加&#xff0c;展位号&#xff1a;A331。 伴随着智能行业的快速发展&#xff0c;展会已被越来越多的企业列入每年必选展会&#xff0c;也成为各采购商选购的理…...

设计优质微信小程序的实用指南!

微信小程序是一种快速发展的应用形式&#xff0c;设计良好的小程序能够提升用户体验并吸引更多的用户。在设计微信小程序时&#xff0c;有一些关键的指南可以帮助我们做出出色的设计。以下是即时设计总结的一些设计指南&#xff0c;希望能对准备设计微信小程序的人有所帮助。 …...

大数据期末总结

文章目录 一、这学期分别学习了Scala、spark、spring、SpringMvc、SpringBoot1、scala2、spark3、spring4、SpringMvc5、SpringBoot 二、总结 一、这学期分别学习了Scala、spark、spring、SpringMvc、SpringBoot 1、scala Scala是一门基于JVM的编程语言&#xff0c;具有强大的…...

selenium面试题总结

今天有同学问到seleinum面试的时候会问到的问题&#xff0c;随便想了想&#xff0c;暂时纪录一下。欢迎大家在评论中提供更多问题。 1.selenium中如何判断元素是否存在&#xff1f; selenium中没有提供原生的方法判断元素是否存在&#xff0c;一般我们可以通过定位元素异常捕获…...

⑧电子产品拆解分析-1拖4USB拓展坞

⑧电子产品拆解分析-1拖4USB拓展坞 一、功能介绍二、电路分析以及器件作用1、内部电路拆解三、参考资料学习一、功能介绍 ①USB2.0一拖四通讯;②具备OTG功能,可适配大部分USB接口设备;二、电路分析以及器件作用 1、内部电路拆解 分析:❤️ ❤️ ❤️ 主控是MA8601 USB 2.0…...

月度精华汇总 | 最新XR行业资讯、场景案例、活动都在这一篇里啦!

​ 在过去的一个月中&#xff0c;平行云为您带来了关于XR领域的一系列精彩文章&#xff0c;涵盖了行业资讯、应用案例&#xff0c;市场互动&#xff0c;帮助您掌握XR领域最新动态&#xff0c;了解实时云渲染、Cloud XR技术的价值&#xff0c;以及平行云实时云渲染解决方案LarkX…...

Redis实战案例1-短信登录

Redis的共享session应用 1. 项目的相关工作 导入sql文件 找到对应的sql文件即可 基本表的信息 基本架构 导入对应的项目文件&#xff0c;启动相关的service服务; 在nginx-1.18.0目录下启动命令行start nginx.exe&#xff1b; 2. 基于session实现登录的流程 这里利用到Javaweb中…...

华为OD机试真题 JavaScript 实现【找终点】【2023 B卷 100分】,附详细解题思路

一、题目描述 给定一个正整数数组&#xff0c;设为nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始&#xff0c;正好走到数组最后一个成员&#xff0c;所使用的最少步骤数。 要求&#xff1a; 第一步必须从第一元素开始&#xff0c;且1 < 第一步的步长 &…...

详解数据仓库数据湖及湖仓一体

比别人更快接收好文章 随着近几年数据湖概念的兴起&#xff0c;业界对于数据仓库和数据湖的对比甚至争论就一直不断。有人说数据湖是下一代大数据平台&#xff0c;各大云厂商也在纷纷的提出自己的数据湖解决方案&#xff0c;一些云数仓产品也增加了和数据湖联动的特性。 但是…...

基于注解切换、Hikari实现的SpringBoot动态数据源(支持JNDI)

实现效果 先说效果&#xff0c;要实现方法级别注解切换当前数据源&#xff0c;不设置注解时走默认数据源&#xff0c;同时支持JNDI源。 总体思路 Spring框架中存在一个抽象类AbstractRoutingDataSource&#xff0c;他是一个可以动态选择当前DataSource的路由类&#xff0c;我…...

Java中的动态链接VS操作系统动态链接

在操作系统OS中为了优化内存的使用会采用一种动态链接方式&#xff0c;一个文件想要在操作系统中运行必须经过编译、汇编译、链接、装载等步骤。可以参考Java程序是怎么跑起来的。本篇主要讲解Java栈帧中动态链接部分与操作系统的的动态链接的区别与联系 操纵系统为什么需要动态…...

深入理解Linux虚拟内存管理(七)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理&#xff08;一&#xff09; 深入理解Linux虚拟内存管理&#xff08;二&#xff09; 深入理解Linux虚拟内存管理&#xff08;三&#xff09; 深入理…...

GSR II 智能速度辅助系统的型式认证和系统作为独立技术单元的型式认证测试流程和技术要求

智能速度辅助系统ISA的型式认证和系统作为独立技术单元的型式认证测试流程和技术要求 补充欧洲议会和欧洲理事会第2019/2144号条例,为机动车智能速度辅助系统的型式认证和这些系统作为独立技术单元的型式认证规定了详细的测试程序和技术要求,并修订该条例的附件二 (1)(EU…...

工厂方法模式(五)

过气的&#xff0c;终究是过气了 上一章简单介绍了工厂模式(四), 如果没有看过,请观看上一章 一.工厂方法模式 工厂方法模式&#xff0c;通过定义工厂父类负责定义创建对象的公共接口&#xff0c;而子类则负责生成具体的对象。 将类的实例化&#xff08;具体产品的创建&…...

力扣笔记(每日随机一题)——最佳买卖股票时机含冷冻期

问题&#xff08;中等&#xff09; 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖出股票后&a…...

yolov5 6.1 关于 tensorrt 加速的使用以及问题说明

文章目录 1. 参考连接2. 使用说明2.1 导出加速模型2.1 使用加速模型2.2 加速参数对比 3. 问题说明3.1 在 Tensorrt 8.4.1.5 版本上使用 export.py 导出失败的问题3.2 把模型文件由 best.pt 更换成加速后的 best.engine 后&#xff0c;执行推理时标注的类别名不正确的问题3.3 导…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...