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

时间:2010-04-10 00:32:35

标签: asp.net visual-studio debugging serialization cassini

我正在努力:

((Request.Params["crmid"] != null))

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

  

输入'QC.Security.SL.SiteUser'   大会'QC.Security,   版本= 1.0.0.1,文化=中立,   PublicKeyToken = null'未标记为   序列化的。

然而,类型(自定义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; } }

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

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

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

1 个答案:

答案 0 :(得分:7)

O.k所以我已经解决了这个问题。这是另一个VS /卡西尼问题。根据{{​​3}}网址和this网址,解决方法是使SiteUser继承MarshalByRefObject。

这是必要的,因为:

  

问题是卡西尼会破裂   随意进入单独的AppDomain,   这在IIS中不会发生(甚至   虽然他们说它可以。)因为   这,当Atlas试图转换时   到JSON上的东西   服务器,它做了一些事情和交换机   并且.User自定义主体没有   反序列化,因为程序集是   不在GAC中且未注册   另一个AppDomain。

“开发人员开发人员咳嗽