私は、MemberModelとCustomPrincipalという2つのクラスを持っています。 CustomPrincipalクラスは、MemberModelクラスを継承します。拡張クラスをベースクラスにマージする
はMemberModelクラスには、次のようになります。
CustomPrincipalクラスは次のようになりますnamespace example.Models
{
public class MemberModel
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
public bool Remember { get; set; }
}
}
:
例でnamespace example.Examples
{
public class CustomPrincipal : MemberModel, IPrincipal
{
public CustomPrincipal(IIdentity identity)
{
this.Identity = identity;
}
public IIdentity Identity { get; private set; }
public bool IsInRole(string role) { return false; }
}
}
次の2つのクラスを参照してください下にMemberModelユーザ名、パスワードで満たされているものとUserPrincipalクラスを覚えていて、何がIIDentity情報で埋められていますが、ユーザー名、パスワードではなく、覚えておいてください。
JavaScriptSerializer serializer = new JavaScriptSerializer();
MemberModel memberModel = serializer.Deserialize<MemberModel>(authTicket.UserData);
IIdentity user = HttpContext.Current.User.Identity;
CustomPrincipal customPrincipal = new CustomPrincipal(user);
ここで、MemberModelの属性をCustomPrincipalの属性とマージします。
私は複数のものを試しましたが、どれも動作していません。私はCustomPrincipalにMemberModelをキャストしようとしましたが、残念ながらこれは機能しませんでした(下記参照)。
customPrincipal = (CustomPrincipal) memberModel;
Unable to cast object of type 'example.Examples.Models.MemberModel' to type 'example.Examples.CustomPrincipal'.
私はまた、2つのオブジェクトをマージするためにリフレクションを使用する、Rob Harleyの例をしようと試みてきたが、これもうまくいきませんでした。
最終的に達成することが期待される結果はなんですか? –
@MongZhu編集の質問:) –
私はあなたのケースで最適なソリューションを引数として 'MemberModel'を取り、手動でこれらのプロパティを設定しますCustomPrincipal''でメソッドを書いたり 'MemberModel' – slawekwin