我是想做一个服务器程序接受客户端的登陆:
客户端连接服务器,序列化数据后传给服务器,服务器接收后反序列化
客户端序列化代码:
public byte[] Serialize(object obj)
{
BinaryFormatter binaryF = new BinaryFormatter();
MemoryStream ms = new MemoryStream(1024 * 10);
binaryF.Serialize(ms, obj);
ms.Seek(0, SeekOrigin.Begin);
byte[] buffer = new byte[(int)ms.Length];
ms.Read(buffer, 0, buffer.Length);
ms.Close();
return buffer;
}
服务器端反序列化代码:
public object Deserialize(byte[] pBytes)
{
object _newOjb = null;
if (pBytes == null)
return _newOjb;
System.IO.MemoryStream _memory = new System.IO.MemoryStream(pBytes);
_memory.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
formatter.FilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
_newOjb = formatter.Deserialize(_memory);
_memory.Close();
return _newOjb;
}
未处理的“System.Runtime.Serialization.SerializationException”类型的异常出现在 mscorlib.dll 中。
其他信息: 无法找到程序集“Client, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”。
客户端的序列化是在class client中进行的,怎么解决这个问题。
我搜索了以前的帖子,没有找到办法,google、baidu上也没个明确知道的。
***********************************************
没做过,不过猜测是你客户端的某个程序集没有包含在服务端内.
如果调试,出错猜测 是在这一句 _newOjb = formatter.Deserialize(_memory);
**********************************************
曾经也是这么做的,把对象序列化了再传递。我用的序列化以及反序列化方法如下:
/// <summary>
/// 将对象序列化为byte数组
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] SerializeObject(object obj)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, obj);
byte[] result = stream.ToArray();
stream.Close();
return result;
}
/// <summary>
/// 从byte数组中还原对象
/// </summary>
/// <param name="buf"></param>
/// <returns></returns>
public static object DeserializeObject(byte[] buf)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream(buf);
object obj = formatter.Deserialize(stream);
stream.Close();
return obj;
}