一个简单的C/S程序,使用的UDP数据报,Client端登陆时创建一个User对象,然后发送给Server端,Server端进行验证,可是Server端将Client端发来的数据反序列化后使用as转换失败,值为null。请大家帮忙看一下什么问题:Client端:    MemoryStream memStream = new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();
    //自己定义的一个与服务器端进行沟通的累
    ContactWithServer contactWithServer;      formatter.Serialize(memStream, user);
    data = memStream.ToArray();
    contactWithServer.sendData(data,data.Length);Server端:    data  = receiveUdpClient.Receive(ref ipep);   //从客户端接收数据报
    memStream = new MemoryStream(data);
    memStream.Seek(0, SeekOrigin.Begin);
    Object obj = formatter.Deserialize(memStream);
    User user =  obj as User;
    if(user == null)
         MessageBox.Show("空对象");

解决方案 »

  1.   

    MessageBox.Show(obj.GetType().ToString()); //输出什么
    User user =  obj as User;
      

  2.   

    服务器、客户端用的User要是同一个assembly中的,不能是两份User定义(即使定义成一样的)
      

  3.   

    建立一个dll包含User
    两端同时引用他
      

  4.   

    只要引用的是同一项目(比如类库项目)里的User类,应该是可以的。反序列化说白了就是传输xml并转化为实体对象的过程。
      

  5.   


    输出的是 User
    完整的是什么,和你下面的User是不是一个User?
      

  6.   

    可序列化的对象在定义的时候有一些条件的,把 User 的定义贴出来吧,其中一个是:
    [Serializable]
      

  7.   


    这个该怎么弄呢,新生啥也不懂你的model定义文件需要在客户端也有一份一摸一样的。你可以在客户端程序解决方案上,点击鼠标右键,选择服务器端工程里的model文件,然后不要选择“打开”而要选择“添加为链接”,例如这个图:当然你也可以总是copy文件然后分别放到不同工程里。但是保持两份,就多一倍的出错几率。
      

  8.   

    哦你使用的是 BinaryFormatter。建议修改一下。我找到以前回复的一个帖子,请参考:http://bbs.csdn.net/topics/390552190