C# XML序列化与反序列化实战

需积分: 0 0 下载量 30 浏览量 更新于2024-09-11 收藏 68KB DOC 举报
"本文介绍了XML序列化与反序列化在C#中的实现方法,通过示例代码展示了如何将对象转换为XML格式的文件以及如何从XML文件恢复对象。" 在编程中,序列化和反序列化是两个关键的概念,用于将对象的状态转化为可存储或传输的数据形式,然后再恢复为原来的对象。在.NET框架中,XML序列化是一种常见的方法,特别是在跨平台和数据交换的场景下。XML序列化允许我们将.NET对象转换为XML文档,以便于存储、传输或者与其他系统交互。 C#中,我们可以使用`System.Xml.Serialization`命名空间下的`XmlSerializer`类来实现XML序列化和反序列化。以下是一个简单的例子: 首先,定义一个可序列化的类。在这个例子中,我们有两个类:`People`和`Student`,其中`Student`继承自`People`。为了指定哪些字段或属性应该在XML中表示,我们可以使用XML特性,如`XmlAttribute`和`XmlElement`: ```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`对象写入XML文件: ```csharp void Main(string[] args) { Student stu = new Student() { Age = 10, Class = "ClassOne", Name = "Tom", Number = 1 }; XmlSerializer ser = new XmlSerializer(typeof(Student)); ser.Serialize(File.Create("C:\\x.xml"), stu); } ``` 反序列化则是将XML文件恢复为`Student`对象: ```csharp XmlSerializer ser = new XmlSerializer(typeof(Student)); Student stu = (Student)ser.Deserialize(File.OpenRead("C:\\x.xml")); ``` 除了单个对象的序列化和反序列化,`XmlSerializer`还可以处理对象数组。如果要序列化一个包含多个`Student`对象的数组,可以创建一个数组,并将其传递给`Serialize`方法。反序列化时,会得到一个包含相同对象的数组。 XML序列化提供了灵活性和可扩展性,因为XML是一种结构化且标准的格式,易于解析和理解。但请注意,与二进制序列化(如`BinaryFormatter`)相比,XML序列化通常会产生更大的文件大小,且序列化和反序列化过程可能稍慢一些。因此,在性能敏感的应用中,可能需要权衡选择更适合的序列化方式。