// public methods
        /// <summary>
        /// Deserializes an object from a BsonReader.
        /// </summary>
        /// <param name="bsonReader">The BsonReader.</param>
        /// <param name="nominalType">The nominal type of the object.</param>
        /// <param name="actualType">The actual type of the object.</param>
        /// <param name="options">The serialization options.</param>
        /// <returns>An object.</returns>
        public override object Deserialize(
            BsonReader bsonReader,
            Type nominalType,
            Type actualType,
            IBsonSerializationOptions options)
        {
            VerifyTypes(nominalType, actualType, typeof(LazyBsonArray));

            var bsonType = bsonReader.GetCurrentBsonType();
            switch (bsonType)
            {
                case BsonType.Null:
                    bsonReader.ReadNull();
                    return null;
                case BsonType.Array:
                    var slice = bsonReader.ReadRawBsonArray();
                    return new LazyBsonArray(slice);
                default:
                    var message = string.Format("Cannot deserialize LazyBsonArray from BsonType {0}.", bsonType);
                    throw new FileFormatException(message);
            }
        }
 private RawBsonArray DeserializeRawBsonArray(BsonReader bsonReader)
 {
     var slice = bsonReader.ReadRawBsonArray();
     var nestedArray = new RawBsonArray(slice);
     _disposableItems.Add(nestedArray);
     return nestedArray;
 }