/// <inheritdoc />
        public int Serialize(TEnumerable value, Action <byte> writeByte)
        {
            ISerializerContracts.Serialize(value, writeByte);

            int serializedLength = this.CountSerializer.Serialize(this.GetCount(value), writeByte);

            return(SerializeEnumerable.SerializeValues(this.ValueSerializer, value, writeByte)
                   + serializedLength);
        }
        /// <inheritdoc />
        public int Serialize(TEnumerable value, byte[] buffer, ref int index)
        {
            ISerializerContracts.Serialize(this, value, buffer, index);

            int originalArrayIndex = index;

            this.CountSerializer.Serialize(this.GetCount(value), buffer, ref index);

            SerializeEnumerable.SerializeValues(this.ValueSerializer, value, buffer, ref index);
            return(index - originalArrayIndex);
        }