C#中XML序列化与反序列化实战教程
![](https://csdnimg.cn/release/wenkucmsfe/public/img/starY.0159711c.png)
“xml 和C#序列化与反序列化”
在C#编程中,序列化和反序列化是将对象的状态转换为可存储或传输的形式(如XML、JSON或二进制),然后从这种形式恢复对象的过程。这个过程在很多场景下都非常有用,例如保存用户配置、跨网络传输数据或者持久化对象状态。本资源主要关注使用XML进行序列化和反序列化的方法。
XML序列化允许我们将C#对象转换为XML文档,这在不支持二进制序列化(如在WinCE环境下)的情况下尤其有用。以下是如何在C#中实现XML序列化和反序列化的示例:
首先,定义一个可序列化的类,使用`[XmlAttribute]`和`[XmlElement]`等特性来指定属性在XML中的表示方式。例如:
```csharp
public class People
{
[XmlAttribute("NAME")]
public string Name { set; get; }
[XmlAttribute("AGE")]
public int Age { set; get; }
}
[XmlRoot("Root")]
public class Student : People
{
[XmlElement("CLASS")]
public string Class { set; get; }
[XmlElement("NUMBER")]
public int Number { set; get; }
}
```
在上面的例子中,`Student`类继承自`People`类,并且都有对应的XML元素或属性。`[XmlRoot]`用于指定XML根元素的名称。
接下来,我们可以使用`System.Xml.Serialization`命名空间中的`XmlSerializer`类来进行序列化和反序列化操作:
```csharp
void Main(string[] args)
{
Student stu = new Student()
{
Age = 10,
Class = "ClassOne",
Name = "Tom",
Number = 1
};
// 序列化对象到XML文件
XmlSerializer ser = new XmlSerializer(typeof(Student));
ser.Serialize(File.Create("C:\\x.xml"), stu);
// 反序列化XML文件到对象
using (FileStream fs = File.OpenRead("C:\\x.xml"))
{
Student deserializedStu = (Student)ser.Deserialize(fs);
}
}
```
这段代码首先创建了一个`Student`对象并设置了其属性值,然后使用`XmlSerializer`将其序列化到名为“x.xml”的文件中。反序列化时,我们打开这个文件并使用`Deserialize`方法恢复对象。
对于对象数组的序列化,可以扩展这个概念,通过创建一个包含多个对象的列表或数组,然后在序列化时传递整个集合。例如:
```csharp
List<Student> students = new List<Student>
{
new Student { ... },
new Student { ... },
// 添加更多学生对象
};
// 序列化对象数组
using (FileStream fs = File.Create("C:\\students.xml"))
{
XmlSerializer arraySerializer = new XmlSerializer(typeof(List<Student>));
arraySerializer.Serialize(fs, students);
}
// 反序列化对象数组
using (FileStream fs = File.OpenRead("C:\\students.xml"))
{
List<Student> deserializedStudents = (List<Student>)arraySerializer.Deserialize(fs);
}
```
这样,整个对象数组就被序列化为一个XML文件,之后可以从该文件中反序列化回原来的列表。
XML序列化和反序列化在C#中是一种强大的工具,它使得数据能够在各种环境中传输和存储,同时也方便了对象的持久化和跨平台操作。通过正确使用XML特性,我们可以精确控制对象在XML中的表示,确保数据的准确性和兼容性。
1013 浏览量
2022-11-13 上传
193 浏览量
244 浏览量
点击了解资源详情
点击了解资源详情
点击了解资源详情
362 浏览量
![](https://profile-avatar.csdnimg.cn/1a94acb8745b4db59be2a6a5afae4bed_w3c18239.jpg!1)
W3C18239
- 粉丝: 3
最新资源
- UABE 2.1d 64bit:Unity资源包编辑与提取工具
- RH64成功编译ffmpeg0.7版本,解决JNI编译难题
- HexBuilder工具:合并十六进制文件并转换为二进制
- 傻瓜式EXCEL财务记账系统教程
- React开发的Traekunst.dk项目概述
- 子域名检测大师:高效采集与暴力枚举解决方案
- Laravel网格查询抽象实现详解
- CKplayer:小巧跨平台网页视频播放器
- SpringBoot实现秒杀功能的简单示例教程
- LabView在WEB开发中的应用:用户事件记录温度报警
- Qt框架下QCamera实现摄像头调用与图像显示
- Mac环境下Sublime Text插件的安装教程
- EFT2.22.1R4中文正式版V3.1发布:绝地反击
- 基于Java技术的网上拍卖商城系统设计与实现
- 42巴黎C++课程完全指南与学习心得
- myBase V7.0.0 Pro Beta-20:升级至HTML格式与丰富插件支持