C#中XML序列化与反序列化实战教程

5星 · 超过95%的资源 需积分: 6 21 下载量 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中的表示,确保数据的准确性和兼容性。