У меня есть пользовательский основной объект, который я хочу иметь возможность сериализации, чтобы я мог сохранить его в Userdata файла cookie FormsAuthentication. Я пытаюсь использовать DataContractJsonSerializer для этого, но когда происходит сериализация, я просто получаю пустую строку (без исключений).
[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
}
А вот код, который я пытаюсь запустить, чтобы выделить все это:
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();