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();
}
}
BinaryFormatter を protobuf-net に置き換えようとしたとき:
using (var memoryStream = new MemoryStream())
{
Serializer.Serialize(memoryStream, token);
return memoryStream.ToArray();
}
次の例外が発生します。
型が予期されておらず、コントラクトを推測できません: System.IdentityModel.Tokens.SessionSecurityToken
追加してみました:
RuntimeTypeModel.Default.Add(typeof(SessionSecurityToken), true);
これは例外を通過しますが、ゼロバイト配列を取得します。
SessionSecurityToken をシリアル化するように protobuf-net を適切に構成するにはどうすればよいですか?
反対に、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);
}
SessionSecurityToken を逆シリアル化するように protobuf-net を適切に構成するにはどうすればよいですか?