Slide 41
Slide 41 text
sampleFormatter.Serialize(ref bin, 0, obj, StandardResolver.Instance);
// 子シリアライザ取得のための入れ物(後述)
IFormatterResolver resolver = StandardResolver.Instance;
// メモリプールから作業用byte[]を取得
var bin = BufferPool.ThreadStaticBuffer;
// byte[]上の0位置から書き込み開始
var offset = 0;
// オブジェクトの線形化 -> 配列上にならべる[Id, Name, Addresses]
offset += MessagePackBinary.WriteArrayHeader(ref bin, offset, 3);
// intのプリミティブバイナリ化
offset += MessagePackBinary.WriteInt32(ref bin, offset, obj.Id);
// stringのプリミティブバイナリ化
offset += MessagePackBinary.WriteString(ref bin, offset, obj.Name);
// string[]の子シリアライザを取得
var addressessFormatter = resolver.GetFormatter();
offset += addressessFormatter.Serialize(ref bin, offset, obj.Addresses, resolver);
// 新規にbyte[]を作り作業用byte[]からコピー
var finalBytes = new byte[offset];
Buffer.BlockCopy(bin, 0, finalBytes, 0, offset);
return finalBytes;