通过实例学C#之序列化与反序列化XmlSerializer类

简介

        可以将类序列化成xml文件,或者将xml文件反序列化成类对象,一般用于保存或加载项目参数。


构造函数

XmlSerializer()

        不使用函数创建一个xmlSerializer对象。


XmlSerializer(Type type)

        使用type对象创建一个xmlSerializer对象,注意,type必须为类,而不能是实例化的对象。

internal class Program
{static void Main(string[] args){Person zhangSan = new Person("zhangSan", 30, "lawer");XmlSerializer serializer = new XmlSerializer(typeof(Person));}
}public class Person
{public string name;public int age;public string job;public Person() { }        //必须要有一个不带参数的构造函数,不然序列化时,会报错public Person(string name, int age, string job){this.name = name;this.age = age;this.job = job;}
}

首先创建一个Person类,里面拥有name,age和job三个字段,后续会用到。


常用方法

Serialize (Stream stream, object  o)

        使用stream流,将实例对象o序列化。

static void Main(string[] args)
{Person zhangSan = new Person("zhangSan", 30, "lawer");XmlSerializer serializer = new XmlSerializer(typeof(Person));FileStream fs = new FileStream("test.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite);try{serializer.Serialize(fs, zhangSan);Console.WriteLine("序列化成功");}catch {Console.WriteLine("序列化失败");}Console.ReadKey();;
}运行结果:
序列化成功

        当序列化成功后,打开项目所在文件夹中的debug文件夹,可以发现,新生成了一个test.xml文件。

打开一看,会发现Person实例zhangSan的三个字段值,已经被保存到xml文档中了。如果以后程序关闭再打开,只要xml文档存在,那么我们就能直接读取对象的三个字段,而不用重新赋值了,下面我们来学一下,怎么在程序开启时读取文件参数。


Deserialize (Stream stream)

        将流stream的信息,反序列化成实例对象。

static void Main(string[] args)
{XmlSerializer serializer = new XmlSerializer(typeof(Person));if (File.Exists("test.xml"))       {FileStream fs = new FileStream("test.xml", FileMode.Open, FileAccess.Read);Person zhangSan=serializer.Deserialize(fs) as Person;Console.WriteLine("name:"+zhangSan.name);Console.WriteLine("age:"+zhangSan.age);Console.WriteLine("job:"+zhangSan.job);}else{Console.WriteLine("xml文档不存在");}Console.ReadKey();;
}运行结果:
name:zhangSan
age:30
job:lawer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lv_table

通过点击lv_table的某一行来选中这一行,以及通过点击另外创建的按钮来删除选中的这一行数据。在table_event_cb回调函数中,我们通过检测点击事件发生的行和列来确定被点击的行,然后在按钮的事件处理器btn_event_cb中,根据之前保存…

洛谷 P3811 [模板] 模意义下的乘法逆元

【模板】模意义下的乘法逆元 题目描述 给定 n , p n,p n,p 求 1 ∼ n 1\sim n 1∼n 中所有整数在模 p p p 意义下的乘法逆元。 这里 a a a 模 p p p 的乘法逆元定义为 a x ≡ 1 ( m o d p ) ax\equiv1\pmod p ax≡1(modp) 的解。 输入格式 一行两个正整数 n , p n,…

Qt——Qt网络编程之获取本机网络信息(通过QHostInfo和QNetworkInterface 类获取本地网络所有接口信息)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》

asp.net core mvc 路由

在ASP.NET Core MVC中,路由是一项核心功能,它负责将进来的HTTP请求映射到相应的控制器和动作方法上。ASP.NET Core支持两种路由方式:传统的基于模板的路由(约定路由)和属性路由。 1. 基于约定的路由 在Startup.Confi…

【001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂】

001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂 文章目录 001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂创作背景通信模型ISO/OSI七层模型 和 TCP/IP四层模型网络通信数据包格式(Ethernet II&…

【opencv GPU】测测你的opencv-GPU 版本每秒处理帧数 大概多少?

在使用OpenCV的cv2.dnn.Net类从ONNX模型文件创建网络时,如果你想要启用GPU加速,你需要确保OpenCV在安装时已经包含了GPU支持。这通常意味着你需要从源代码编译OpenCV,并确保在编译过程中启用了CUDA支持。 以下是如何在OpenCV中启用GPU加速的…

20240421阿夏的CSDN创作纪念日(3周年)

缘 提示:可以和大家分享最初成为创作者的初心 3年前我写下第一篇CSDN,开启了Python研究之旅win10系统64位( 惠普)台式电脑自动开机、关机图文详细解(一)_惠普主板设置自动开机-CSDN博客文章浏览阅读4.2k次…

对观察者模式的理解

目录 一、场景1、题目描述 【[案例来源](https://kamacoder.com/problempage.php?pid1075)】2、输入描述3、输出描述4、输入示例5、输出示例 二、实现三、更复杂的场景 【[案例来源](https://refactoringguru.cn/design-patterns/observer/java/example#example-0--listeners-…

深入OceanBase内部机制:资源隔离实现的方式总结

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 1. 为何HTAP需要资源隔离2. OceanBase的资源隔离机制概述租户间资源隔离租户内资源隔离物理资源隔离大查询请求的隔离优先级…

26.ELF文件解析

ELF文件及objdump/readelf命令 文章目录 ELF文件及objdump/readelf命令ELF文件结构分析使用od命令读取ELF文件使用readelf命令读取ELF文件使用objdump命令分析ELF文件reference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 ELF(Executa…

4月21敲一篇猜数字游戏,封装函数,void,无限循环,快去体验体验

今天敲一篇猜数字游戏 目录 今天敲一篇猜数字游戏 1.打开先学goto语句: 2.开干: 首次我们学习随机数: 讲解一下: 改用srand; 加入时间变量: 获取时间:哈​编辑 3.我本来想已近够完美了&#xff0…

Flink学习(七)-单词统计

前言 Flink是流批一体的框架。因此既可以处理以流的方式处理,也可以按批次处理。 一、代码基础格式 //1st 设置执行环境 xxxEnvironment env xxxEnvironment.getEnvironment;//2nd 设置流 DataSource xxxDSenv.xxxx();//3rd 设置转换 Xxx transformation xxxDS.…

Spring Boot中接收各种各样的参数

一、接收json参数&#xff0c;封装为Map 1.1、核心代码 /*** 接收json参数&#xff0c;封装为Map* param servletRequest* return* throws Exception*/ PostMapping("/getParam") public R getParam(HttpServletRequest servletRequest) throws Exception {Map<…

Bootstrap 5 保姆级教程(十二):弹出框 消息弹窗

一、弹出框 1.1 创建弹出框 通过向元素添加 data-bs-toggle"popover" 来来创建弹出框。 title 属性的内容为弹出框的标题&#xff0c;data-bs-content 属性显示了弹出框的文本内容&#xff1a; 注意: 弹出框要写在 JavaScript 的初始化代码里。 以下实例可以在文…

NLP 文本表征方式

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;将文本转换成计算机能够理解和处理的格式是一个基本的步骤。这个过程通常被称为文本表征或文本向量化。下面&#xff0c;我将详细介绍几种常见的文本表征方法&#xff0c;并提供一些例子来说明这些技术是如何应用的。…

投入产出表的分析要点有哪些

投入产出分析是利用投入产出表、投入产出系数和投入产出模型&#xff0c;对国民经济各部门之间的技术经济联系和影响进行分析的一种经济数据分析方法。 一、什么是投入产出表 我国的投入产出表是描述国民经济中各种产品的来源与使用去向的棋盘式平衡表 , 是产品部门 产品部门…

【已解决】电脑设置notepad++默认打开txt

1、以管理员的方式打开notepad 步骤&#xff1a;打开设置 -> 首选项 -> 文件关联 2、 设置Notepad默认打开 按照以下步骤将Notepad设置为默认打开.txt文件&#xff1a; 右键单击任何一个.txt文件。选择“属性”。在“常规”选项卡中&#xff0c;找到“打开方式”&#…

【Interconnection Networks 互连网络】Dragonfly Topology 蜻蜓网络拓扑

蜻蜓拓扑 Dragonfly Topology 1. 拓扑参数2. Topology Description 拓扑描述3. Topology Variations 拓扑变体 蜻蜓拓扑 Dragonfly Topology 1. 拓扑参数 Dragonfly拓扑参数&#xff1a; N N N: 网络中终端(terminal)的总数量 p p p: 连接到每个路由器的终端数量 a a a: 每…

VR全景:为户外游玩体验插上科技翅膀

随着VR全景技术的愈发成熟&#xff0c;无数人感到惊艳&#xff0c;也让各行各业看到了一片光明的发展前景。尤其是越来越多的文旅景区开始引入VR全景技术&#xff0c;相较于以往的静态风景图&#xff0c;显然现在的VR全景结合了动态图像和声音更加吸引人。 VR全景技术正在逐步改…

密码学 | 承诺:Pedersen 承诺 + ZKP

​ &#x1f951;原文&#xff1a;Toward Achieving Anonymous NFT Trading &#x1f951;写在前面&#xff1a;看了篇 22 年 SCI 3 区论文&#xff0c;里面提到在 Pedersen 承诺的揭示阶段可以使用零知识证明&#xff0c;而不必揭示消息明文和随机数。姑且记录一下这个方法。…