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

server/2024/12/23 10:20:21/

简介

        可以将类序列化成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.ppmy.cn/server/7222.html

相关文章

【数学建模】建筑工地开工问题

题目: 某公司有 6 6 6个建筑工地要开工,每个工地的位置(用平面坐标 ( a , b ) (a,b) (a,b)表示,距离单位: k m km km)及水泥日用量 d ( 单位 : t ) d(单位:t) d(单位:t)由下表给出,目前有两个临时料场位于 P ( 5 , 1 ) &#xff0…

【Ansible】02

【Ansible】01 Ansible playbook 剧本 ansible-playbook 常用于复杂任务的管理管理经常要完成的任务playbook也是通过模块和它的参数 , 在特定主机上执行任务playbook是一个文件 , 该文件中需要通过yaml格式进行书写将经常需要执行的任务写入一个文件剧本/文件中可以包换多…

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的?(快速定位) 1.学习最重要的事情 (学生阶段,找工作前阶段) 2.家庭,女朋友 (工作阶段/学生阶段,学习不受到影响) …

使用 Cucumber框架进行BDD测试的一些项目

BehatMage 项目地址: https://github.com/MageTest/BehatMage 不过该项目在GitHub中有超过10年没有更新了。 项目介绍: BehatMage项目介绍 BehatMage是一个基于Behat的Magento测试框架,用于自动化测试Magento电子商务平台的功能和性能。Behat是一个行…

2024年腾讯云免费服务器最新申请入口链接

腾讯云免费服务器申请入口 txybk.com/go/free 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云百科txybk.com分享2024年最新腾讯云免费服务器申请入口、限制…

win32-显示窗口、消息循环、消息队列

承接上文: win32窗口编程windows 开发基础win32-注册窗口类、创建窗口 本文目录 显示窗口 ShowWindow function (winuser.h)消息循环消息基础MSG 结构体的定义 MSG structure (winuser.h)POINT structure 结构体 (windef.h)DispatchMessage() 如何将消息派发给窗口…

UE5数字孪生系列笔记(四)

场景的切换 创建一个按钮的用户界面UMG 创建一个Actor,然后将此按钮UMG添加到组件Actor中 调节几个全屏的背景 运行结果 目标点切换功能制作 设置角色到这个按钮的位置效果 按钮被点击就进行跳转 多个地点的切换与旋转 将之前的目标点切换逻辑替换成旋转的逻…

在云计算环境中,保护Java应用程序可用的有效措施和工具

云计算(Cloud)技术是近年来计算机科学的一个重要突破。大多数组织已经通过将自己的应用程序移入云平台而获益。不过,如何保证应用程序在第三方服务器上的安全性,是一项艰巨的挑战。 一、在云环境中保护Java应用程序 安全性是软件…