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

2024-04-21 06:28

本文主要是介绍通过实例学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

这篇关于通过实例学C#之序列化与反序列化XmlSerializer类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/922364

相关文章

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n