BinaryFormatter 能够简单地处理序列化:
private byte[] TokenToBytes(SessionSecurityToken token)
{
if (token == null)
{
return null;
}
using (var memoryStream = new MemoryStream())
{
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, token);
return memoryStream.ToArray();
}
}
当我尝试用 protobuf-net 替换 BinaryFormatter 时:
using (var memoryStream = new MemoryStream())
{
Serializer.Serialize(memoryStream, token);
return memoryStream.ToArray();
}
我得到以下异常:
类型不是预期的,也无法推断出合约:System.IdentityModel.Tokens.SessionSecurityToken
我尝试添加:
RuntimeTypeModel.Default.Add(typeof(SessionSecurityToken), true);
它超越了异常,但我现在得到了一个零字节数组。
如何正确配置 protobuf-net 以序列化 SessionSecurityToken?
另一方面,SessionSecurityToken 没有无参数构造函数。
using (var memoryStream = new MemoryStream(tokenAsBytes))
{
return Serializer.Deserialize<SessionSecurityToken>(memoryStream);
}
抛出一个 ProtoException:
找不到 SessionSecurityToken 的无参数构造函数
BinaryFormatter
能够毫不费力地做到这一点:
using (var memoryStream = new MemoryStream(bytes))
{
var binaryFormatter = new BinaryFormatter();
return (SessionSecurityToken)binaryFormatter.Deserialize(memoryStream);
}
如何正确配置 protobuf-net 以反序列化 SessionSecurityToken?