0
私はをFormsAuthenticationクッキーのUserdataの中でそれを格納することができるようにシリアライズすることができるようにしたいカスタムプリンシパルオブジェクトを持っています。私はこれを行うDataContractJsonSerializerを使用しようとしているが、シリアル化が発生したときに私は空の文字列(例外なし)を取得します。SerializeをカスタムPrincipalオブジェクト
[DataContract]
public class MyPrincipal : IPrincipal
{
private readonly MyIdentity _identity;
public MyPrincipal(MyIdentity identity)
{
_identity = identity;
}
[DataMember]
public IIdentity Identity
{
get { return _identity; }
set { }
}
public bool IsInRole(string role)
{
return _identity.AuthGroups.Contains(role, StringComparer.OrdinalIgnoreCase);
}
public bool IsInRole(string[] roles)
{
return roles.Any(IsInRole);
}
}
[DataContract]
public class MyIdentity : IIdentity
{
private readonly MyCustomData _customData;
public MyIdentity(MyCustomData customData)
{
_customData = customData;
}
#region IIdentity properties
[DataMember]
public string Name
{
get { return Username; }
set {}
}
[DataMember]
public string AuthenticationType
{
get { return "Forms"; }
set {}
}
[DataMember]
public bool IsAuthenticated
{
get { return true; }
set { }
}
#endregion
#region custom properties
[DataMember]
public string FirstName
{
get { return _customData.FirstName; }
set { }
}
[DataMember]
public string LastName
{
get { return _customData.LastName; }
set { }
}
[DataMember]
public string RedwoodID
{
get { return _customData.CedarnetRedwoodID; }
set { }
}
[DataMember]
public string Username
{
get { return _customData.NetworkLogin; }
set { }
}
[DataMember]
public string CuwasTicket
{
get { return _customData.CuwasTicket; }
set { }
}
[DataMember]
public List<string> AuthGroups
{
get { return _customData.GroupMembership; }
set { }
}
#endregion
}
そして、ここで私はそれをすべてseralizeするために実行しようとしているコードです:
var serializer = new DataContractJsonSerializer(typeof(MyPrincipal), new List<Type> {typeof(MyPrincipal), typeof(MyIdentity)});
var responseStream = new MemoryStream();
serializer.WriteObject(responseStream, user);
string serializedValue = new StreamReader(responseStream).ReadToEnd();
うわー、恥ずかしい。ありがとう。 – Kyle
あまり恥ずかしいです。よくある間違い - 私はそれも難しい方法を学んだ。 – Aliostad
私はしばらくこのベストプラクティスに苦労しました。私はセッションでPrincipalオブジェクトをキャッシュしていましたが、これは悪い考えのようです。私はかなりフォーム認証の新しいです。本当にこれを行う最良の方法は何ですか? – Kyle