序列化对象

来源:互联网 发布:淘宝睡衣退款率 编辑:程序博客网 时间:2024/05/22 05:14

当我们需要通过Socket通信发送对象,发送类是DataTable表的时候,我们通常需要将这个对象先序列化,然后转换层自己数组在通过socket.Send()方法发送,然后再接受端进行反序列化获取该对象

public class SerializeObj
    {
        
public SerializeObj()
        { }

        
/// <summary>
        
/// 序列化对象到字节组
        
/// </summary>
        
/// <param name="obj">泛型对象</param>
        
/// <returns>序列化后的字节数组</returns>
        public static byte[]Serialize<T>(T obj)
        {
            
try
            {
                IFormatter formatter 
= new BinaryFormatter();
                MemoryStream stream 
= new MemoryStream();
                formatter.Serialize(stream, obj);
                stream.Position 
= 0;
                
byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 
0, buffer.Length);
                stream.Flush();
                stream.Close();
                
return buffer;
            }
            
catch (Exception ex)
            {
                
throw new Exception("序列化失败,原因:" + ex.Message);
            }
        }

        
/// <summary>
        
/// 反序列化 字符串到对象
        
/// </summary>
        
/// <param name="buffer">要转换为对象的字节数组</param>
        
/// <returns>反序列化出来的对象</returns>
        public static T Desrialize<T>(byte[] buffer)
        {
            try
            {
                T obj = default(T);
                IFormatter formatter = new BinaryFormatter();
                MemoryStream stream = new MemoryStream(buffer);
                obj = (T)formatter.Deserialize(stream);
                stream.Flush();
                stream.Close();
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception("反序列化失败,原因:" + ex.Message);
            }
        }



0 0
原创粉丝点击