protected internal override async Task <T> UnpackFromAsyncCore(Unpacker unpacker, CancellationToken cancellationToken)
        {
            if (!unpacker.IsArrayHeader)
            {
                SerializationExceptions.ThrowIsNotArrayHeader(unpacker);
            }

            var itemsCount = UnpackHelpers.GetItemsCount(unpacker);

            if (itemsCount != this._itemSerializers.Count)
            {
                SerializationExceptions.ThrowTupleCardinarityIsNotMatch(this._itemSerializers.Count, itemsCount, unpacker);
            }

            var unpackedItems = new List <object>(this._itemSerializers.Count);

            for (var i = 0; i < this._itemSerializers.Count; i++)
            {
                if (!await unpacker.ReadAsync(cancellationToken).ConfigureAwait(false))
                {
                    SerializationExceptions.ThrowMissingItem(i, unpacker);
                }

                unpackedItems.Add(await this._itemSerializers[i].UnpackFromAsync(unpacker, cancellationToken).ConfigureAwait(false));
            }

            return(this.CreateTuple(unpackedItems));
        }
        protected internal override T UnpackFromCore(Unpacker unpacker)
        {
            if (!unpacker.IsArrayHeader)
            {
                SerializationExceptions.ThrowIsNotArrayHeader(unpacker);
            }

            var itemsCount = UnpackHelpers.GetItemsCount(unpacker);

            if (itemsCount != this._itemSerializers.Count)
            {
                SerializationExceptions.ThrowTupleCardinarityIsNotMatch(this._itemSerializers.Count, itemsCount, unpacker);
            }

            var unpackedItems = new List <object>(this._itemSerializers.Count);

            for (var i = 0; i < this._itemSerializers.Count; i++)
            {
                if (!unpacker.Read())
                {
                    SerializationExceptions.ThrowMissingItem(i, unpacker);
                }

                unpackedItems.Add(this._itemSerializers[i].UnpackFrom(unpacker));
            }

            return(this.CreateTuple(unpackedItems));
        }