SerializationException与自定义GenericIdentiy?

Mun*_*PhD 5 asp.net-mvc serialization

我正在尝试实现我自己的GenericIdentity实现,但在尝试加载视图时我一直收到以下错误(我正在使用asp.net MVC):

 System.Runtime.Serialization.SerializationException was unhandled 
 by user code Message="Type is not resolved for member 
 'OpenIDExtendedIdentity,Training.Web, Version=1.0.0.0, 
 Culture=neutral, PublicKeyToken=null'."
      Source="WebDev.WebHost"
Run Code Online (Sandbox Code Playgroud)

我最后得到了以下课程:

[Serializable]
    public class OpenIDExtendedIdentity : GenericIdentity {
        private string _nickName;
        private int _userId;

        public OpenIDExtendedIdentity(String name, string nickName, int userId)
            : base(name, "OpenID") {
            _nickName = nickName;
            _userId = userId;
        }
        public string NickName {
            get { return _nickName; }
        }

        public  int UserID {
            get { return _userId; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的Global.asax中,我将cookie的序列化值读入内存流,然后使用它来创建我的OpenIDExtendedIdentity对象.经过各种各样的尝试后,我最终尝试了这种解决方案.它正常工作,直到它尝试渲染视图.

我基本上试图实现的是能够执行以下操作(使用asp.net中的默认角色管理器):

User.Identity.UserID
User.Identity.NickName
... etc.
Run Code Online (Sandbox Code Playgroud)

我已经列出了一些我试图解决这个问题的资料.有些人报告了Cassini错误,但似乎其他人已经成功实现了这种类型的自定义功能 - 因此令人难以置信.

Bad*_*jer 3

我不确定这是否是完全相同的问题,但在尝试创建自己的身份实现时遇到了同样的问题。

这个博客解决了我的问题。

问题似乎是 Cassini 中的身份序列化存在问题,但您可以通过从 MarshalByRefObject 派生类来解决它:

[Serializable]
public class MyUser : MarshalByRefObject, IIdentity
{
    public int UserId ... 
Run Code Online (Sandbox Code Playgroud)

当然,您不能从 GenericIdentity 继承,但您仍然可以实现 GenericIdentity 实现的 IIdentity 接口,因此您至少可以在大多数需要 IIdentity 的地方使用该东西。