Exemplo n.º 1
0
        private object ReadItem(BSonItemType type, out string key)
        {
            int length;
            int dataOffset;

            key = _input.ReadStringUTF8(int.MaxValue);
            dataOffset = _input.Offset;
            switch (type)
            {
                case BSonItemType.Double:
                    return _factory.CreateNumber(_input.ReadDouble());

                case BSonItemType.String:
                case BSonItemType.JavaScript:
                case BSonItemType.Symbol:
                    length = _input.ReadInt32();
                    return _factory.CreateString(_input.ReadStringUTF8(length));

                case BSonItemType.Object:
                    return ReadDocument();

                case BSonItemType.Array:
                    return ReadArray();

                case BSonItemType.Binary:
                    throw new FormatException("Unsupported 'binary' field at " + dataOffset);

                case BSonItemType.Undefined:
                    throw new FormatException("Unsupported 'undefined' field at " + dataOffset);

                case BSonItemType.ObjectID:
                    throw new FormatException("Unsupported 'object-id' field at " + dataOffset);

                case BSonItemType.Boolean:
                    return _factory.CreateKeyword(_input.ReadByte() > 0 ? JSonReader.TrueTokenData : JSonReader.FalseTokenData);

                case BSonItemType.DateTime:
                    return _factory.CreateNumber(_input.ReadUInt64());

                case BSonItemType.Null:
                    return _factory.CreateKeyword(JSonReader.FalseTokenData);

                case BSonItemType.RegExp:
                    return ReadRegExp();

                case BSonItemType.DbPointer:
                    throw new FormatException("Unsupported 'DbPointer' field at " + dataOffset);

                case BSonItemType.JavaScriptScoped:
                    return ReadJavaScriptScoped();

                case BSonItemType.Int32:
                    return _factory.CreateNumber(_input.ReadInt32());

                case BSonItemType.Timestamp:
                    return _factory.CreateNumber(_input.ReadInt64());

                case BSonItemType.Int64:
                    return _factory.CreateNumber(_input.ReadInt64());

                default:
                    throw new FormatException("Unsupported '" + type + "' field at " + dataOffset);
            }
        }
Exemplo n.º 2
0
        private object ReadItem(BSonItemType type, out string key)
        {
            int length;
            int dataOffset;

            key        = _input.ReadStringUTF8(int.MaxValue);
            dataOffset = _input.Offset;
            switch (type)
            {
            case BSonItemType.Double:
                return(_factory.CreateNumber(_input.ReadDouble()));

            case BSonItemType.String:
            case BSonItemType.JavaScript:
            case BSonItemType.Symbol:
                length = _input.ReadInt32();
                return(_factory.CreateString(_input.ReadStringUTF8(length)));

            case BSonItemType.Object:
                return(ReadDocument());

            case BSonItemType.Array:
                return(ReadArray());

            case BSonItemType.Binary:
                throw new FormatException("Unsupported 'binary' field at " + dataOffset);

            case BSonItemType.Undefined:
                throw new FormatException("Unsupported 'undefined' field at " + dataOffset);

            case BSonItemType.ObjectID:
                throw new FormatException("Unsupported 'object-id' field at " + dataOffset);

            case BSonItemType.Boolean:
                return(_factory.CreateKeyword(_input.ReadByte() > 0 ? JSonReader.TrueTokenData : JSonReader.FalseTokenData));

            case BSonItemType.DateTime:
                return(_factory.CreateNumber(_input.ReadUInt64()));

            case BSonItemType.Null:
                return(_factory.CreateKeyword(JSonReader.FalseTokenData));

            case BSonItemType.RegExp:
                return(ReadRegExp());

            case BSonItemType.DbPointer:
                throw new FormatException("Unsupported 'DbPointer' field at " + dataOffset);

            case BSonItemType.JavaScriptScoped:
                return(ReadJavaScriptScoped());

            case BSonItemType.Int32:
                return(_factory.CreateNumber(_input.ReadInt32()));

            case BSonItemType.Timestamp:
                return(_factory.CreateNumber(_input.ReadInt64()));

            case BSonItemType.Int64:
                return(_factory.CreateNumber(_input.ReadInt64()));

            default:
                throw new FormatException("Unsupported '" + type + "' field at " + dataOffset);
            }
        }