C#中XML序列化与反序列化实战教程
5星 · 超过95%的资源 需积分: 6 123 浏览量
更新于2024-09-13
收藏 68KB DOC 举报
“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中的表示,确保数据的准确性和兼容性。
2020-07-01 上传
2022-11-13 上传
2024-01-05 上传
2015-08-21 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
W3C18239
- 粉丝: 3
- 资源: 2
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码