我需要帮助来弄清楚为什么BinaryFormatter不能反序列化身份:
var identities = new[]
{
new ClaimsIdentity("Bug")
{
Actor = new ClaimsIdentity("Bootstrap Context as a string")
{
BootstrapContext = "this causes issue"
},
BootstrapContext = new BootstrapContext("this raw token")
}
};
var sessionToken = new SessionSecurityToken(new ClaimsPrincipal(identities));
byte[] buffer;
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, sessionToken);
buffer = ms.ToArray();
}
using (var ms = new MemoryStream(buffer))
{
var formatter = new BinaryFormatter();
sessionToken = (SessionSecurityToken)formatter.Deserialize(ms);
}
这会导致带有内部消息的异常TargetInvocationException:
“无法将'System.String'类型的对象强制转换为'System.IdentityModel.Tokens.BootstrapContext'。” 我无法调试框架来自己弄清楚它,因此我请求您帮助找出这种意外行为的根源。
答案 0 :(得分:3)
BootstrapContext
中的ClaimsIdentity
属性属于Object
类型。这意味着您可以为其指定一个字符串(就像您一样)。但是,reading the documentation您可以看到它实际上应该是BootstrapContext
对象,这可能是在反序列化期间预期的。