C#二进制序列化使用笔记

    二进制序列化,常用情况就是把对象序列化为二进制字节流,用于对象状态持久化或网络传输。可能之前因为对序列化机制了解不够彻底,现在把它记录下来,作为备忘录。同时也希望对看到这篇文章的朋友有所启示和帮助。

    二进制序列化类型BinaryFormatter,它存在于命名空间:System.Runtime.Serialization.Formatters.Binary;

    而序列化的对象都必须被标识为:[Serializable()]。

  • 序列化对象为二进制字节流

     public static byte[] Serialize(Object obj)
     {
            MemoryStream ms = new MemoryStream();
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            binaryFormatter.Serialize(ms, obj);

            return ms.GetBuffer();
     }

  • 反序列化二进制字节流为对象

      public static Object Deserialize(byte[] buffer)
      {
            MemoryStream ms = new MemoryStream(buffer);
            BinaryFormatter binaryFormatter = new BinaryFormatter();

            return binaryFormatter.Deserialize(ms); ;
      }

 

    如果我不想序列化某个字段或属性时。使用过序列化的人都知道使用[NoSerialized()]特性来标识。但是,[NoSerialized()]只用应用于字段域。例如,在.Net3.0之后属性的定义可以使用无字段域定义属性。如果该属性我不想被序列化的情况,那么就只能采用字段域来定义属性的返回值。

    总而言之,我们看可以把二进制序列化视为只对字段域的序列化,对于无字段域的属性,可视为.net使用了隐藏的字段域,如果需要标识某个属性不应被序列化时,只能显示声明该属性的字段域了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值