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

序列化与反序列化xml bin

1、XML

XML(可扩展标记语言)序列化是一种将对象的数据结构转换为XML格式的过程,以便将其存储在文件中、通过网络传输或与其他系统进行数据交换。在C#中,你可以使用.NET框架提供的XmlSerializer类来执行对象到XML的序列化和XML到对象的反序列化操作。

using System;
using System.IO;
using System.Xml.Serialization;// 定义一个简单的类
[Serializable]
public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){// 创建一个Person对象Person person = new Person { Name = "Alice", Age = 30 };// 序列化XmlSerializer serializer = new XmlSerializer(typeof(Person));using (TextWriter writer = new StreamWriter("person.xml")){serializer.Serialize(writer, person);}Console.WriteLine("Serialization complete.");// 反序列化Person deserializedPerson;using (TextReader reader = new StreamReader("person.xml")){deserializedPerson = (Person)serializer.Deserialize(reader);}Console.WriteLine($"Deserialized: Name={deserializedPerson.Name}, Age={deserializedPerson.Age}");}
}

在这个示例中,我们首先定义了一个简单的Person类,然后使用XmlSerializer类来序列化和反序列化Person对象。序列化操作将Person对象的数据保存为XML文件,而反序列化操作则将XML文件的内容转换回Person对象。
请注意,要在类上进行XML序列化,类需要满足一些要求,例如需要是可公开序列化的,通常可以使用[Serializable]属性来标记。在.NET中,还可以使用其他属性和注解来更详细地控制序列化的方式和结果。
总之,XML序列化是一种在C#中将对象转换为XML格式的常用技术,用于数据的存储、传输和交换。

2、Bin

使用 BinaryFormatter 类进行二进制序列化和反序列化。

  1. 引入命名空间: 确保在代码文件的顶部引入以下命名空间,以便可以使用 BinaryFormatter 类和相关类型。
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
1. 定义要序列化的类: 首先,你需要定义一个类,该类将要被序列化和反序列化。这个类需要标记为 [Serializable] 特性,以指示它可以被二进制序列化。
csharpCopy code
[Serializable]
public class Data
{public int Number { get; set; }public string Text { get; set; }
}
2. 序列化: 在序列化时,你将对象写入到一个文件流中。
csharpCopy code
Data data = new Data { Number = 42, Text = "Hello, Binary Serialization!" };BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("data.bin", FileMode.Create))
{formatter.Serialize(fs, data);Console.WriteLine("Serialization complete.");
}3. 反序列化: 在反序列化时,你从文件流中读取二进制数据,并将其转换回对象。
csharpCopy code
Data deserializedData;
using (FileStream fs = new FileStream("data.bin", FileMode.Open))
{deserializedData = (Data)formatter.Deserialize(fs);Console.WriteLine($"Deserialized: Number={deserializedData.Number}, Text={deserializedData.Text}");
}

注意事项:
● 二进制序列化会将对象的所有字段和属性存储为二进制数据。这使得数据不太容易人类可读,但效率较高。
● 被序列化的类需要有一个无参数的构造函数,以便在反序列化时可以实例化对象。
● 在实际应用中,可能需要对异常进行适当的处理,例如处理文件不存在或格式不正确的情况。
总之,BinaryFormatter 类允许你在C#中进行二进制序列化和反序列化,从而在不同的应用程序之间存储和交换数据。然而,需要注意安全性和兼容性的问题,尤其是在跨应用程序、跨版本和跨平台的情况下。

相关文章:

  • elasticsearch-hadoop.jar 6.8版本编译异常
  • 【SpringBoot开发】之商城项目案例(沙箱支付)
  • IDEA 每次新建工程都要重新配置 Maven的解决方案
  • Java中如何使用SQLite数据库
  • 【Python小游戏】消消乐丨喜羊羊与灰太狼(完整代码)
  • 2397. 被列覆盖的最多行数
  • bullet3 三种碰撞检测及实现
  • 不要盲目自学网络安全!学习顺序特别重要!
  • WPF调节图片的对比度
  • 抖音小店怎么做好前期运营?这三个步骤做好就行了!
  • 【开题报告】基于SpringBoot的洗衣店管理系统的设计与实现
  • ios环境搭建_xcode安装及运行源码
  • 【干货】Windows中定时删除system32目录下的.dmp文件教程
  • springboot连接oracle报错ORA-12505解决方案
  • JOSEF约瑟 定时限过流继电器 JSL-21/5 柜内安装,板前接线 实物图
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • emacs初体验
  • JAVA_NIO系列——Channel和Buffer详解
  • markdown编辑器简评
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mysql常用命令汇总
  • Node项目之评分系统(二)- 数据库设计
  • Ruby 2.x 源代码分析:扩展 概述
  • Service Worker
  • SpringBoot几种定时任务的实现方式
  • vue脚手架vue-cli
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 大数据与云计算学习:数据分析(二)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分布式任务队列Celery
  • 利用DataURL技术在网页上显示图片
  • 使用Gradle第一次构建Java程序
  • 用Python写一份独特的元宵节祝福
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 原生js练习题---第五课
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 栈实现走出迷宫(C++)
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​ArcGIS Pro 如何批量删除字段
  • #单片机(TB6600驱动42步进电机)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (2)(2.10) LTM telemetry
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)Java对象在Hibernate持久化层的状态
  • (一)Linux+Windows下安装ffmpeg
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .gitignore文件—git忽略文件
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET MVC第五章、模型绑定获取表单数据
  • .net web项目 调用webService
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉