MongoDB.Driver.BsonReader.ReadDoc C# (CSharp) Method

ReadDoc() public method

public ReadDoc ( ) : Doc
return Doc
        public Doc ReadDoc()
        {
            var doc = new Doc();
              ReadInt32(); //size (ignored)
              while(true)
              {
            var type = (BsonType)ReadByte();
            if (type == BsonType.EOO)
            {
              return doc;
            }
            var name = ReadShortString();
            object o = null;
            switch (type)
            {
              case BsonType.NUMBER:
            o = ReadDouble();
            break;
              case BsonType.STRING:
            o = ReadString(ReadInt32());
            break;
              case BsonType.OBJECT:
            o = ReadDoc();
            break;
              case BsonType.ARRAY:
            o = ReadDoc().ToList();
            break;
              case BsonType.BINARY:
            var count = ReadInt32();
            ReadByte(); //TODO: handle 'subtype'
            o = ReadBytes(count);
            break;
              case BsonType.UNDEFINED:
            break;
              case BsonType.OID:
            o = ReadObjectId();
            break;
              case BsonType.BOOLEAN:
            o = ReadBoolean();
            break;
              case BsonType.DATE:
            o = ReadDate();
            break;
              case BsonType.NULL:
            break;
              case BsonType.REGEX:
            o = new Regex(ReadShortString());
            ReadShortString(); //TODO: options
            break;
              case BsonType.REF:
            o = ReadDBRef();
            break;
              case BsonType.CODE:
            o = new Code(ReadString(ReadInt32()));
            break;
              case BsonType.SYMBOL:
            o = new Symbol(ReadString(ReadInt32()));
            break;
              case BsonType.CODE_W_SCOPE:
            ReadInt32();
            o = new ScopedCode(ReadString(ReadInt32()), ReadDoc());
            break;
              case BsonType.NUMBER_INT:
            o = ReadInt32();
            break;
              case BsonType.TIMESTAMP:
            o = new TimeStamp(ReadInt64());
            break;
              case BsonType.NUMBER_LONG:
            o = ReadInt64();
            break;
              case BsonType.MINKEY:
            break;
              case BsonType.MAXKEY:
            break;
              default:
            break;
            }
            doc.Add(name, o);
              }
        }