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<string[]>(); 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;