C# XML序列化与反序列化实用方法

需积分: 10 0 下载量 87 浏览量 更新于2024-08-04 收藏 2KB TXT 举报
"C#源码实现的XML序列化与反序列化方法" 在C#编程中,XML序列化和反序列化是将对象转换为XML格式的字符串或将XML字符串还原为对象的过程。这对于数据存储、网络传输或者与其他系统交换数据非常有用。在提供的代码片段中,`CommonClass.XmlUtil`类提供了两个反序列化方法和一个序列化方法,方便开发者快速进行XML操作。 首先,我们来详细解释这些方法: 1. 反序列化方法: - `Deserialize(Type type, string xml)`: 这个方法接受一个类型`Type`和一个XML字符串`xml`,然后尝试将这个字符串转换为指定类型的对象。它使用了`System.Xml.Serialization.XmlSerializer`类来完成反序列化。首先,创建一个`StringReader`实例读取XML字符串,然后通过`XmlSerializer`的`Deserialize`方法解析XML数据并返回相应的对象。如果在反序列化过程中出现异常,该方法会捕获异常并返回`null`。 - `Deserialize(Type type, Stream stream)`: 这个方法与上一个类似,但接受一个`Stream`对象而不是XML字符串。这允许从内存流或文件流等流式数据中进行反序列化。同样,它使用`XmlSerializer`的`Deserialize`方法来处理流中的数据。 2. 序列化方法: - `Serializer(Type type, object obj)`: 此方法接收一个对象`obj`和一个类型`Type`,将对象转换为XML格式的字符串。首先,创建一个`MemoryStream`对象,然后使用`XmlSerializer`对给定的对象进行序列化,将结果写入内存流。接着,将内存流的内容复制到一个新的`StringBuilder`,并返回这个字符串表示的XML数据。这种方法通常用于将对象转换为可存储或发送的数据。 这些方法的使用非常简单。例如,如果你有一个名为`Person`的类,你可以这样使用`XmlUtil`: ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } } // 创建一个Person对象 Person p = new Person { Name = "John", Age = 30 }; // 序列化Person对象为XML字符串 string xml = XmlUtil.Serializer(typeof(Person), p); // 将XML字符串反序列化回Person对象 Person deserializedPerson = (Person)XmlUtil.Deserialize(typeof(Person), xml); ``` 请注意,XML序列化和反序列化对对象有一些限制。例如,对象的属性必须有公共访问器,且不能是抽象或接口类型。此外,`XmlSerializer`不支持匿名类型或动态类型。对于更复杂的情况,可能需要使用其他序列化技术,如JSON.NET或protobuf-net。 总结起来,这段C#代码提供了一个实用的工具类,可以方便地在XML和对象之间进行序列化和反序列化操作,这对于数据持久化、跨平台通信以及数据交换场景非常有用。开发者可以根据需要,直接在自己的项目中引用并使用这些方法。