本帖最后由 teahj 于 2012-05-21 23:30:32 编辑

解决方案 »

  1.   

    StudentList 里估计引用到别的程序集里的类了。而这个程序集在你的项目里没有引用到。
      

  2.   

    student.dat是在程序集8-4里被序列化的,现在要在8-4实例里进行反序列化,因此报错
    因为序列化和反序列化需要使用同一个程序集的同一个可序列化类定义,因此,要么使用同一个程序集定义类并进行序列化和反序列化,要么必须引用定义可序列化类的程序集
      

  3.   

    我是个菜鸟,刚学C#,各位老师们你们能说具体点不。能帮我调试下代码吗?你们说的dll我倒是看过,但我从没用过,也不会编写啊?
      

  4.   

    那我就将项目涉及到的所有代码都发给了,大家帮帮我,教教我编写一个含有dll的项目
    写student.dat文件的项目地址下载地址http://d.1tpan.com/tp1502912424
    还有一个是读取编译文件的项目的地址:http://d.1tpan.com/tp0508508001
      

  5.   

    是B/S 还是C/S啊?  如果用自己定义 的序列化和反序列化就可以,
      

  6.   

    等于没回答,你不如说,我已经在qq里回答了你,反正都看不到,如此保密做啥?这里问题很简单,如果你的StudentList同时在2个项目中定义了,那么序列化和反序列化将回出现你这样的问题,因为即使类名一样,但是类的命名空间却不同。解决方法有两个:
    一、即便2个项目,你也都用同一个命名空间这是完全允许的。
    二、使用DataContractSerializer类来序列化和反序列化,对要序列化的类定义时添加 [DataContract(Namespace = "")]属性,指定一个相同的命名空间,例如:[DataContract(Namespace = "默认命名空间")]
    public class StudentList
    {
         [DataMember]
         public int A { get; set; }
         [DataMember]
         public String B { get; set; }
    }
      

  7.   

    我在2楼已作了简略的回答。后来楼主给我发了私信,我回了后在这里只是提了句,请qldsrx不要这样激动估计qldsrx也没有下过楼主的代码看过。楼主是在两个程序集里把可序列化类定义了两次。命名空间固然要求一致。但首先是要保证程序集签名的一致!!
      

  8.   

    我是没下过楼主的代码,但是既然贴出来的错误信息是PublicKeyToken = null,那么就不存在签名,只要考虑命名空间即可。
      

  9.   

    PublicKeyToken = null只是表明没有强名称签名,不是没有签名
      

  10.   

    经过大家的帮助,我想了见天,
    student.dat是在程序集8-4里被序列化的,现在要在8-4实例里进行反序列化,因此报错
    应为定义的序列化类(这里是class stuent和class stuentlist)只需定义一次,以后使用必须是的是这个命名空间下的定义,再次定义在其他命名空间下也不行(即使是class stuent和class stuentlist的定义保持一模一样也不行),需要使用同一个程序集的同一个可序列化类定义,因此,要么使用同一个程序集定义类并进行序列化和反序列化,要么必须引用定义可序列化类的程序集
       辛苦大家。
      

  11.   

    用SerializationBinder
    如 
    A.A aa = new A.A();
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms, aa);ms.Seek(0, SeekOrigin.Begin);
    bf.Binder = new MyBinder();
    B.A ba = (B.A)bf.Deserialize(ms);
                
    class MyBinder : SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {
            return typeof(B.A);
        }
    }
    http://msdn.microsoft.com/zh-cn/library/ffas09b2(v=vs.90).aspx
      

  12.   

    http://msdn.microsoft.com/zh-cn/library/ffas09b2(v=vs.90).aspx