C# 对象和byte数组的互相转化(序列化)

    通常Socket数据传送过程中,我们把对象转化为byte数组,接手时再将数组转化为对应的对象,这一过程可以通过序列化完成

前提是传输的对象必须标记为可以序列化的,下面举个例子:

Package为 我们要传送接收的对象消息

 [Serializable]
    public class Package
    {
        /// <summary>
        /// 包类型
        /// </summary>
        public PackageType PackType { get; set; }
        /// <summary>
        /// 源IP及端口
        /// </summary>
        public string Src_IP_Port { get; set; }
        /// <summary>
        /// 目标IP及端口
        /// </summary>
        public string Desc_IP_Port { get; set; }
    }

发送数据时,我们通过BinaryFormatter对象将Package对象序列化进MemoryStream内存流中,然后得到Byte数组进行传递。

   private void Send(Package pack, Socket s)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            byte[] retbuff = new byte[1];
            using (MemoryStream mStream = new MemoryStream())
            {
                formatter.Serialize(mStream, pack);
                mStream.Flush();
                s.Send(mStream.GetBuffer(), (int)mStream.Length, SocketFlags.None);
                s.Receive(retbuff, 1, SocketFlags.OutOfBand);
                if (retbuff[0] == 0)
                {
                    Send(pack, s);
                }
            }
        }

 接收数据时将byte数组写入内存流,通过BInaryFormatter的反序列化将内存流中的数据转化为对象

   BinaryFormatter formatter = new BinaryFormatter();
                        using (MemoryStream mStream = new MemoryStream())
                        {
                            mStream.Write(buffer, 0, ret);
                            mStream.Flush();
                            mStream.Seek(0, SeekOrigin.Begin);
                            pack = (Package)formatter.Deserialize(mStream);
                        }

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值