c#正反序列化XML文件示例(xml序列化)


在C#中,使用`System.Xml.Serialization`命名空间下的类可以实现XML文件的序列化和反序列化。以下是一个简单的示例,展示了如何序列化一个对象到XML文件,以及如何从XML文件反序列化回对象。

首先,我们需要一个可序列化的类。为了简化,我们定义一个`Person`类:


using System;
using System.Xml.Serialization;

// 标记类为可序列化
[Serializable]
[XmlRoot("Person")] // 指定根元素名称
public class Person
{
    [XmlElement("Name")] // 指定元素名称
    public string Name { get; set; }

    [XmlElement("Age")]
    public int Age { get; set; }

    // 构造函数
    public Person() { }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

然后,我们需要编写序列化和反序列化的方法:


using System;
using System.IO;
using System.Xml.Serialization;

public class XmlSerializerHelper
{
    // 序列化到XML文件
    public static void SerializeObjectToXml<T>(T obj, string filePath)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));

        using (TextWriter textWriter = new StreamWriter(filePath))
        {
            serializer.Serialize(textWriter, obj);
        }
    }

    // 从XML文件反序列化
    public static T DeserializeObjectFromXml<T>(string filePath)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(T));

        using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
        {
            return (T)serializer.Deserialize(fileStream);
        }
    }
}

现在,我们可以使用这个帮助类来序列化和反序列化`Person`对象:


class Program
{
    static void Main(string[] args)
    {
        Person person = new Person("John Doe", 30);

        // 序列化到XML文件
        string filePath = "person.xml";
        XmlSerializerHelper.SerializeObjectToXml(person, filePath);

        // 从XML文件反序列化
        Person deserializedPerson = XmlSerializerHelper.DeserializeObjectFromXml<Person>(filePath);

        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}

这段代码首先创建了一个`Person`对象,并将其序列化到名为`person.xml`的文件中。然后,它从这个文件中反序列化出一个`Person`对象,并打印出这个对象的`Name`和`Age`属性。

请确保您的项目引用了`System.Xml.Serialization`和`System.IO`命名空间,以便使用上述代码。