- C# 中对象序列化 XML 方法概述
C# 中对象序列化 XML 的方法可以将对象以 XML 文件的形式序列化并保存在磁盘上,也可以将 XML 文件反序列化成对象。这种方法可以方便地在不同的系统之间传输数据,并且保留了对象的结构和属性。C# 中对象序列化 XML 的方法主要有以下两种:
- 使用 XmlSerializer 类进行序列化和反序列化。
- 使用 DataContractSerializer 类进行序列化和反序列化(需要添加 System.Runtime.Serialization 引用)。
下面分别就两种方法进行讲解。
- 使用 XmlSerializer 类进行序列化和反序列化
XmlSerializer 类可以将公共类型的实例序列化为 XML 文档或反序列化 XML 文档为公共类型的实例。XmlSerializer 的序列化方法必须在属性或字段上附加 XmlAttribute,XmlElement 或 SoapAttribute,因为 XmlSerializer 类序列化公共类型的公共属性和字段。示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;
namespace ConsoleApp1
{
[XmlRoot("User")] // 序列化对象时的根元素
public class User
{
[XmlAttribute("ID")] // 序列化为属性
public int Id { get; set; }
[XmlElement("Name")] // 序列化为元素
public string Name { get; set; }
[XmlElement("Age")] // 序列化为元素
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
User user1 = new User { Id = 1, Name = "Tom", Age = 20 };
User user2 = new User { Id = 2, Name = "Cindy", Age = 24 };
// 序列化对象到 XML 文件
XmlSerializer serializer = new XmlSerializer(typeof(User));
using (TextWriter writer = new StreamWriter("user.xml"))
{
serializer.Serialize(writer, user1);
serializer.Serialize(writer, user2);
}
// 反序列化 XML 文件到对象
XmlSerializer deserializer = new XmlSerializer(typeof(User));
using (TextReader reader = new StreamReader("user.xml"))
{
User user3 = (User)deserializer.Deserialize(reader);
Console.WriteLine("ID: {0}, Name: {1}, Age: {2}", user3.Id, user3.Name, user3.Age);
}
}
}
}
示例代码中定义了一个 User 类,并使用 XmlRoot、XmlAttribute 和 XmlElement 等属性来定义序列化/反序列化时的 XML 文档格式。在 Main 方法中,创建了两个 User 对象,分别通过 XmlSerializer 实例对其进行序列化后保存在 user.xml 文件中,并通过同样的 XmlSerializer 对 user.xml 文件进行反序列化,最后将结果输出到控制台。
- 使用 DataContractSerializer 类进行序列化和反序列化
DataContractSerializer 类是一种更为灵活的序列化方案,可以将序列化数据输出到不同的输出流中,比如 MemoryStream、FileStream 等。同时,DataContractSerializer 也支持 LINQ to XML,因此可以轻松地与 XElement 或 XDocument 一起使用。下面是使用 DataContractSerializer 进行序列化和反序列化的示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization;
namespace ConsoleApp1
{
[DataContract]
public class User
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
User user1 = new User { Id = 1, Name = "Tom", Age = 20 };
User user2 = new User { Id = 2, Name = "Cindy", Age = 24 };
// 将对象序列化到内存流中
MemoryStream stream1 = new MemoryStream();
DataContractSerializer serializer1 = new DataContractSerializer(typeof(User));
serializer1.WriteObject(stream1, user1);
serializer1.WriteObject(stream1, user2);
// 读取内存流并反序列化
stream1.Seek(0, SeekOrigin.Begin);
DataContractSerializer deserializer1 = new DataContractSerializer(typeof(User));
User user3 = (User)deserializer1.ReadObject(stream1);
Console.WriteLine("ID: {0}, Name: {1}, Age: {2}", user3.Id, user3.Name, user3.Age);
}
}
}
示例代码中先定义了一个 User 类,并使用 DataContract 和 DataMember 等属性来定义其序列化和反序列化的规则。在 Main 方法中,创建了两个 User 对象,然后将这两个对象序列化到 MemoryStream 中。接着从 MemoryStream 中读取数据,并通过 DataContractSerializer 对其进行反序列化。最后输出反序列化后的结果到控制台。
- 总结
C# 中对象序列化 XML 的方法可以方便地将对象与 XML 文档进行相互转换,这样即便在不同的系统间传输数据也会更加方便。本文中介绍了两种不同的序列化方案,并且分别给出了相应的示例代码,希望读者可以借此了解和掌握更多有关 C# 中对象序列化 XML 的相关知识。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 中对象序列化XML的方法 - Python技术站