public void WriteList(IList list)
{
var i = 0;
var start = (int)BaseStream.Position;
base.Write(0); // spot for length
foreach (var item in list)
{
Write(Bson.TypeOf(item), i.ToString(), item);
i++;
}
Write((sbyte)BsonType.EOO);
var len = (int)(BaseStream.Position - start);
Seek(start, SeekOrigin.Begin);
Write(len);
Seek(start + len, SeekOrigin.Begin);
}