private IEnumerable<BsonElement> MaterializeThisLevel()
{
var elements = new List<BsonElement>();
var readerSettings = _readerSettings.Clone();
readerSettings.MaxDocumentSize = _slice.Length;
using (var bsonReader = new BsonBinaryReader(new BsonBuffer(CloneSlice(), true), true, readerSettings))
{
bsonReader.ReadStartDocument();
BsonType bsonType;
while ((bsonType = bsonReader.ReadBsonType()) != BsonType.EndOfDocument)
{
var name = bsonReader.ReadName();
BsonValue value;
switch (bsonType)
{
case BsonType.Array: value = DeserializeLazyBsonArray(bsonReader); break;
case BsonType.Document: value = DeserializeLazyBsonDocument(bsonReader); break;
default: value = (BsonValue)BsonValueSerializer.Instance.Deserialize(bsonReader, typeof(BsonValue), null); break;
}
elements.Add(new BsonElement(name, value));
}
bsonReader.ReadEndDocument();
}
return elements;
}
}