调试:当类型IS标记为可序列化时,如何调试"类型未标记为可序列化"异常

ris*_*ism 4 asp.net debugging serialization cassini visual-studio

我试着:

((Request.Params["crmid"] != null))
Run Code Online (Sandbox Code Playgroud)

在网页中.但它不断抛出序列化异常:

类型"QC.Security.SL.SiteUser"在组件"QC.Security,版本= 1.0.0.1,文化=中性公钥=空"未标记为可序列.

然而,类型(自定义IIdentity)标记为可序列化如下:

 [Serializable()]
    public class SiteUser : IIdentity
    {
        private long _userId;
        public long UserId { get { return _userId; } set { _userId = value; } }
        private string _name;
        public string Name { get { return _name; } }
        private bool _isAuthenticated;
        public bool IsAuthenticated { get { return _isAuthenticated; } }
        private string _authenticationType;
        public string AuthenticationType { get { return _authenticationType; } }
Run Code Online (Sandbox Code Playgroud)

我不知道如何调试这个,因为我无法进入序列化器代码,以找出它为什么会摔倒.调用堆栈在到达[外部代码]之前只有一帧深度.并且错误消息是无用的,因为类型明确标记为可序列化.试验和错误调整也产生了一个类型未解决的成员异常.

它工作正常.但现在"突然间"它并不通常意味着Visual Studio中的一些愚蠢的错误,但重启并没有帮助"这个"时间.所以现在我不知道这是一个愚蠢的VS错误还是一个完全不相关的错误,我得到了序列化异常或者我做错了什么.

事实上,我不再相信VS了,因为过去几个月我一直在进行的疯狂追逐数量,这是通过重新启动VS 2008或其他一些荒谬的解决办法来"修复"的.

ris*_*ism 7

好的,我已经解决了这个问题.这是另一个VS /卡西尼问题.根据 URL和 URL,解决方法是使SiteUser继承MarshalByRefObject.

这是必要的,因为:

问题是cassini将随意分解到单独的AppDomain,这在IIS中不会发生(即使他们说它是CAN).因此,当Atlas尝试将JSON转换为服务器上的某些内容时,它会执行某些操作,并且.User自定义主体不会反序列化,因为程序集不在GAC中而未在其他AppDomain中注册.

"开发人员开发人员咳嗽 "

  • 很好,你解决了问题,但无论如何谁在卡西尼发展?为什么不直接在将要托管您的网站(IIS)的平台上开发?从长远来看,它将为您省去很多麻烦. (5认同)