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