c# vs2012 序列化(Serialize)和反序列化(Deserialize)实际应用
c#中序列化和反序列化又称之为串行化,能够使运行的中的数据结构及数据能够长时间保存起来,用以后面的使用。本文也就实际项目来说明。
一.TCP通信
从初步建立TCP连接,到发送验证数据包数据,这边就需要向服务器发送数据。发送的数据是验证信息,就简单来说,如果是一个字符串,这里面我们用TCP可以直接写入流就行了:
//客户端
string content = "发送的数据";
Byte[] bytSend = Encoding.UTF8.GetBytes(content);
ntwStream.Write(bytSend, 0, bytSend.Length);
而相对应的服务器接收数据应该是这样:
//服务器
listener.Listen(0);
Socket socket = listener.Accept();
NetworkStream ntwStream = new NetworkStream(socket);
StreamReader strmReader = new StreamReader(ntwStream);
strmReader.ReadToEnd()
这种传输数据结构相对很简单的TCP可以直接传输即可,但是对于相对复杂的结构的数据,类的实例,需要的数据有int,string,还有文件列表List<>等等,那么简单数据传输就不适用了(也可以简单传输,但是解析相对困难),这时候就需要序列化(后面有复杂结构示例),下面就以验证数据包来说明,数据包包括登录名和密码
//在要序列化的类上面加上[Serializable]声明这个类是可以序列化的
[Serializable]
public class LoginInfo
{
//登入数据包.
public String strUID = null;//用户名
public String strPWD = null;//密码.
public Int32 iState = 0;//状态值.
}
客户端发送验证数据包
//客户端
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter mBinaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
try
{
//连接服务器
ClientTcp.Connect(System.Net.IPAddress.Parse(strIPAddr),iPort);
//发送验证数据包
LoginInfo mLoginInfo = new LoginInfo();
mLogin