C# 序列化实战:存储与读取对象数据

需积分: 9 2 下载量 30 浏览量 更新于2024-09-15 收藏 3KB TXT 举报
"C#序列化是.NET框架提供的一种将对象的状态转换为可存储或传输的形式的技术。这在处理数据持久化、网络通信以及状态保存等场景时非常有用。本示例代码展示了如何在C#中使用二进制和SOAP序列化进行操作。" 在C#编程中,序列化是一个关键概念,它允许我们将一个对象的状态转化为可以在不同时间或在不同的环境中重新创建该对象的格式。这种格式通常为XML、JSON或二进制数据。C#提供了内置的支持来实现对象的序列化和反序列化,主要通过`System.Runtime.Serialization`命名空间中的类来完成。 1. **序列化** - **二进制序列化**:使用`BinaryFormatter`类可以将对象序列化为二进制格式,这适合本地存储和效率较高的数据传输。在代码中,创建`BinaryFormatter`实例并调用其`Serialize`方法将对象写入`FileStream`,如示例所示。 ```csharp BinaryFormatter bformatter = new BinaryFormatter(); bformatter.Serialize(fs, myinfo); ``` - **SOAP序列化**:SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化信息。`SoapFormatter`类用于将对象序列化为SOAP消息。虽然不如二进制序列化效率高,但其格式标准,易于跨平台通信。 ```csharp SoapFormatter soapFormatter = new SoapFormatter(); soapFormatter.Serialize(fs, myinfo); ``` 2. **非序列化字段** - 使用`[NonSerialized]`特性可以标记某个字段不应该参与序列化过程。例如,`MyInfo`类中的`sex`字段就没有被序列化。 3. **反序列化** - 反序列化是序列化的逆过程,用于从已序列化的数据中重建对象。在代码中,创建相同类型的对象实例,然后调用`Deserialize`方法从`FileStream`中读取数据。 ```csharp MyInfomyDeserializedInfo = (MyInfo)bformatter.Deserialize(fs); ``` 4. **应用场景** - **数据持久化**:将对象的状态保存到磁盘,以便稍后恢复。 - **网络通信**:在客户端和服务器之间传递对象,例如Web服务。 - **状态保存**:在多线程或多进程环境中,保存对象的状态以便稍后恢复。 5. **安全性考虑** - 序列化可能涉及安全风险,因为它可能导致敏感数据泄露。因此,应谨慎处理序列化和反序列化的数据,尤其是在网络环境中。 - 应尽可能避免序列化不受信任的数据,并确保只反序列化来自可信任源的数据。 6. **其他序列化技术** - `XmlSerializer`:用于XML序列化,输出格式清晰,易于阅读,适合于人和机器的交互。 - `DataContractSerializer`和`NetDataContractSerializer`:用于WCF(Windows Communication Foundation)服务,提供更高级别的控制和优化。 - `JsonSerializer`(如Newtonsoft.Json库):用于JSON序列化,广泛用于Web应用,因其轻量级和易读性而受欢迎。 C#序列化是一个强大且灵活的工具,能够帮助开发者在各种场景下处理和传递对象的状态。了解和掌握不同的序列化技术对于编写高效、安全的C#应用程序至关重要。