мне нужна помощь, чтобы выяснить, почему BinaryFormatter не десериализации идентичности:Почему 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 '. " Я не могу отлаживать Framework, чтобы выяснить его самостоятельно, поэтому я прошу вас помочь выяснить корень этого неожиданного поведения.
Итак, свойство принимает System.Object, но всегда должно быть экземпляром BootstrapContext, если мы предполагаем использование сериализации? –
@DmitriySosunov Да, вот как я его интерпретирую. Я бы сказал, что он должен _ всегда быть экземпляром «BootstrapContext», независимо от того, используется ли сериализация или нет. –
Спасибо, я отправил свои комментарии Vittori (автор System.IdentityModel.Tokens.Jwt). Я нашел эту проблему при работе с токенами ActAs и токенами JWT, и там Vottiry сохраняет контекст в виде строки. –