C# Serializable对象序列化

本文探讨了C#中对象序列化的概念,包括将对象转换为可传输格式以跨网络传输,以及保存和恢复对象状态。同时介绍了如何进行基本序列化操作,并讲解了如何通过NonSerialized属性实现选择性序列化,避免不必要成员的序列化。
摘要由CSDN通过智能技术生成

1、序列化定义:将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。反之,反序列化根据流重新构造对象。
在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本
2、使用序列化的原因:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在 ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域。本文简要介绍了 Microsoft .NET 中使用的序列化。
3、基本序列化

[Serializable]
public class MyObject {
    public int n1 = 0;       
    public int n2 = 0;         
    public String str = null;      
       }

以下代码片段说明了如何将此类的一个实例序列化为一个文件:

MyObject obj = new MyObject();            
    obj.n1 = 1;          
      obj.n2 = 24;            
      obj.str = "一些字符串";
     IFormatter formatter = new BinaryFormatter();            
    Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);            
    formatter.Serialize(stream, obj);            
    stream.Close();

4、五.选择性序列化

类通常包含不应被序列化的字段。例如,假设某个类用一个成员变量来存储线程 ID。当此类被反序列化时,序列化此类时所存储的 ID 对应的线程可能不再运行,所以对这个值进行序列化没有意义。可以通过使用 NonSerialized 属性标记成员变量来防止它们被序列化,如下所示:

[Serializable]            
public class MyObject            
 {               
   public int n1;               
   [NonSerialized]
   public int n2;             
   public String str;      
 }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值