通过实例学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

相关文章

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

C# Semaphore与SemaphoreSlim区别小结

《C#Semaphore与SemaphoreSlim区别小结》本文主要介绍了C#Semaphore与SemaphoreSlim区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、核心区别概览二、详细对比说明1.跨进程支持2.异步支持(关键区别!)3.性能差异4.API 差

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable