在C#网络编程中,为了传输复杂的数据类型,如类类型和容器,例如Dictionary,List。我们需要将其转换成字节数组。
C#中提供了序列化和反序列化来实现该方式。先转换成内存流,在转换成
public static System.IO.MemoryStream SerializeBinary(object request)
{
System.IO.MemoryStream memStream = new System.IO.MemoryStream();
serializer.Serialize(memStream, request);
return memStream;
}
public static object DeSerializeBinary(System.IO.MemoryStream memStream)
{
object obj;
obj = serializer.Deserialize(memStream);
return obj;
}
外层调用代码:
public void Send_Date(object obj)
{
TcpClient Ts = Ret_Client(); //获取TCP连接
NetworkStream nws = Ts.GetStream(); //获取网络流
System.IO.MemoryStream memStream = TypeChange.SerializeBinary(obj);
byte[] byt = new byte[memStream.Length];
memStream.Read(byt, 0, byt.Length);
nws.Write(byt, 0, byt.Length);
}
public object Receive_Date()
{
TcpClient Ts = Ret_Client();
NetworkStream nws = Ts.GetStream();
while (nws.DataAvailable)
{
byte[] byt = new byte[nws.Length]; //读取数据
nws.Read(byt, 0, byt.Length);
memStream.Write(byt, 0, byt.Length);
}
return TypeChange.DeSerializeBinary(memStream);
}
序列化对象时,需要在类定义处加上[Serializable]。
例如: [Serializable] //序列化
public class Film
{}