C#对象反序列化与对象序列化是.NET编程中的重要概念,主要用于数据持久化和跨应用程序通信。本文档详细讲解了这两个过程的原理和应用示例。 首先,让我们理解对象序列化的概念。在C#中,主要有三种方式实现对象序列化:二进制序列化、SOAP序列化和XML序列化。 1. 二进制序列化: - 使用`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类实现,其序列化后的结果是以二进制形式存储,可以包含一个类型的所有可序列化字段,无论它们是公共字段还是私有字段,但会包含类型信息,以便在反序列化时进行类型检查。 2. SOAP序列化: - 通过`System.Runtime.Serialization.Formatters.Soap.SoapFormatter`实现,遵循SOAP协议,序列化后的数据可以跨应用程序共享,特别是对于跨语言通信很有用。序列化过程会使用XML命名空间保存原始程序集信息,提供更好的终端开放性。 3. XML序列化: - XML序列化通过`System.Xml.Serialization.XmlSerializer`实现,序列化结果是XML格式,只适用于公共字段或具有公共属性的私有字段,私有且未通过属性公开的字段会被忽略。XML序列化不包含完整的类型名称或程序集信息,有利于跨平台和易读性。 为了使对象支持序列化,开发者需要在类上添加`[Serializable]`特性,并针对不希望序列化的成员使用`[NonSerialized]`特性。下面是一个使用二进制序列化和反序列化的简单示例: ```csharp [Serializable] public class Person { private string Name; // 姓名 private bool Sex; // 性别,是否是男 [NonSerialized] // 不序列化此字段 private string Password; // 密码字段 public Person(string name, bool sex) { Name = name; Sex = sex; } // 反序列化方法 protected Person(SerializationInfo info, StreamingContext context) { Name = (string)info.GetValue("Name", typeof(string)); Sex = (bool)info.GetValue("Sex", typeof(bool)); } // 序列化方法 public void Serialize(Stream stream) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, this); } // 反序列化示例 public static Person Deserialize(Stream stream) { BinaryFormatter formatter = new BinaryFormatter(); return (Person)formatter.Deserialize(stream); } } ``` 在这个示例中,`Person`类被标记为可序列化,并且`Password`字段被标记为非序列化,以保护敏感信息。`Serialize`方法用于将对象写入流中,而`Deserialize`方法则可以从流中恢复对象状态。 了解并掌握C#对象的反序列化和序列化技巧,有助于编写高效、安全的应用程序,特别是在分布式系统和跨平台交互中。
剩余11页未读,继续阅读
- 粉丝: 3
- 资源: 963
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解