序列化對象

當我們需要通過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);
            }
        }



發佈了21 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章