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); } }
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); } }