在 C# 中,XML 序列化是指将对象转换为 XML 格式的字符串,以便于保存到文件或网络中。而反序列化则是将 XML 格式的字符串转换回对象。C# 提供了一组类和方法来支持 XML 序列化和反序列化。
- XmlSerializer 类:用于将对象序列化为 XML 格式的字符串,或将 XML 格式的字符串反序列化为对象。
- XmlRootAttribute 类:指定对象在 XML 中的根元素的名称。
- XmlElementAttribute 类:指定对象在 XML 中的元素的名称和命名空间。
- XmlAttributeAttribute 类:指定对象在 XML 中的属性的名称和命名空间。
下面是一个 XML 序列化和反序列化的示例代码:
using System;
using System.Xml.Serialization;
using System.IO;
public class Person
{
[XmlAttribute("id")]
public int Id { get; set; }
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("age")]
public int Age { get; set; }
[XmlElement("gender")]
public string Gender { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 创建 Person 对象
Person person = new Person
{
Id = 1,
Name = "Alice",
Age = 18,
Gender = "Female"
};
// 将 Person 对象序列化为 XML 格式的字符串
XmlSerializer serializer = new XmlSerializer(typeof(Person));
StringWriter writer = new StringWriter();
serializer.Serialize(writer, person);
string xml = writer.ToString();
Console.WriteLine("Serialized XML:");
Console.WriteLine(xml);
// 将 XML 格式的字符串反序列化为 Person 对象
StringReader reader = new StringReader(xml);
Person deserializedPerson = (Person)serializer.Deserialize(reader);
Console.WriteLine("Deserialized Person:");
Console.WriteLine("Id: " + deserializedPerson.Id);
Console.WriteLine("Name: " + deserializedPerson.Name);
Console.WriteLine("Age: " + deserializedPerson.Age);
Console.WriteLine("Gender: " + deserializedPerson.Gender);
}
}
在这个示例中,我们首先创建了一个 Person 类,定义了该类的属性和 XML 元素的映射关系。然后,使用 XmlSerializer 类将 Person 对象序列化为 XML 格式的字符串,或将 XML 格式的字符串反序列化为 Person 对象。在序列化和反序列化的过程中,我们可以使用 StringWriter 和 StringReader 类将对象和 XML 格式的字符串相互转换。
需要注意的是,在使用 XmlSerializer 进行序列化和反序列化时,需要为要序列化或反序列化的类的每个属性添加适当的 XML 元素属性,以确保序列化和反序列化的正确性。同时,由于序列化和反序列化会涉及到网络或文件 I/O,所以需要注意处理异常情况,确保程序的健壮性。