代码改变世界

C# xml序列化与反序化有哪些方法

  钟铧若岩  阅读(6)  评论(0编辑  收藏  举报
在 C# 中,XML 序列化和反序列化是将对象转换为 XML 格式(序列化)以及将 XML 格式转换回对象(反序列化)的过程。以下为你详细介绍相关的方法和示例。

1. 使用 System.Xml.Serialization.XmlSerializer 类


XmlSerializer 是.NET 框架中用于 XML 序列化和反序列化的核心类,它可以将对象的公共属性和字段转换为 XML,也可以将 XML 数据还原为对象。

复制代码
using System;
using System.IO;
using System.Xml.Serialization;

// 定义一个可序列化的类
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        // 序列化示例
        Person person = new Person { Name = "John", Age = 30 };
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        using (StringWriter writer = new StringWriter())
        {
            serializer.Serialize(writer, person);
            string xml = writer.ToString();
            Console.WriteLine("序列化后的XML:");
            Console.WriteLine(xml);

            // 反序列化示例
            using (StringReader reader = new StringReader(xml))
            {
                Person deserializedPerson = (Person)serializer.Deserialize(reader);
                Console.WriteLine("\n反序列化后的对象:");
                Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
            }
        }
    }
}
复制代码

 

代码解释


  • 定义可序列化的类:使用 [Serializable] 特性标记类,表示该类可以被序列化。
  • 创建 XmlSerializer 实例:通过指定要序列化的对象类型来创建 XmlSerializer 实例。
  • 序列化对象:使用 Serialize 方法将对象转换为 XML 字符串。
  • 反序列化 XML:使用 Deserialize 方法将 XML 字符串转换回对象。

2. 使用 System.Runtime.Serialization.DataContractSerializer 类


DataContractSerializer 是另一个用于序列化和反序列化对象的类,它支持更多的序列化选项,如数据契约和数据成员的控制。

复制代码
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;

// 定义一个具有数据契约的类
[DataContract]
public class Employee
{
    [DataMember]
    public string EmployeeName { get; set; }
    [DataMember]
    public int EmployeeId { get; set; }
}

public class Program
{
    public static void Main()
    {
        // 序列化示例
        Employee employee = new Employee { EmployeeName = "Jane", EmployeeId = 123 };
        DataContractSerializer serializer = new DataContractSerializer(typeof(Employee));
        using (MemoryStream stream = new MemoryStream())
        {
            serializer.WriteObject(stream, employee);
            stream.Position = 0;
            using (XmlReader reader = XmlReader.Create(stream))
            {
                string xml = new StreamReader(stream).ReadToEnd();
                Console.WriteLine("序列化后的XML:");
                Console.WriteLine(xml);

                // 反序列化示例
                stream.Position = 0;
                Employee deserializedEmployee = (Employee)serializer.ReadObject(reader);
                Console.WriteLine("\n反序列化后的对象:");
                Console.WriteLine($"EmployeeName: {deserializedEmployee.EmployeeName}, EmployeeId: {deserializedEmployee.EmployeeId}");
            }
        }
    }
}
复制代码

代码解释

 

  • 定义具有数据契约的类:使用 [DataContract] 特性标记类,使用 [DataMember] 特性标记要序列化的属性。
  • 创建 DataContractSerializer 实例:通过指定要序列化的对象类型来创建 DataContractSerializer 实例。
  • 序列化对象:使用 WriteObject 方法将对象写入流中。
  • 反序列化 XML:使用 ReadObject 方法从流中读取对象。

总结

 

    • XmlSerializer 适用于简单的序列化需求,使用方便,但对类的结构有一定要求。
    • DataContractSerializer 提供了更多的控制选项,如数据契约和数据成员的控制,适用于更复杂的序列化场景。

 

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示