Exemple #1
0
        /// <inheritdoc/>
        public override bool Read()
        {
            switch (_wrappedReader.State)
            {
            case BsonReaderState.Closed:
            case BsonReaderState.Done:
                return(false);

            case BsonReaderState.EndOfArray:
                _wrappedReader.ReadEndArray();
                SetCurrentToken(Newtonsoft.Json.JsonToken.EndArray);
                return(true);

            case BsonReaderState.EndOfDocument:
                _wrappedReader.ReadEndDocument();
                SetCurrentToken(Newtonsoft.Json.JsonToken.EndObject);
                return(true);

            case BsonReaderState.Initial:
            case BsonReaderState.Type:
                if (_wrappedReader.State == BsonReaderState.Initial && _wrappedReader.IsAtEndOfFile())
                {
                    SetCurrentToken(Newtonsoft.Json.JsonToken.None);
                    return(false);
                }
                else
                {
                    _wrappedReader.ReadBsonType();
                    return(Read());
                }

            case BsonReaderState.Name:
                var name = _wrappedReader.ReadName();
                name = _propertyNameBinder?.ReadName(name) ?? name;
                SetCurrentToken(Newtonsoft.Json.JsonToken.PropertyName, name);
                return(true);

            case BsonReaderState.Value:
                ReadValue();
                return(true);

            default:
                throw new Newtonsoft.Json.JsonReaderException(string.Format("Unexpected IBsonReader state: {0}.", _wrappedReader.State));
            }
        }
Exemple #2
0
        public override bool Read()
        {
            if (bsonReader.State == BsonReaderState.Initial ||
                bsonReader.State == BsonReaderState.ScopeDocument ||
                bsonReader.State == BsonReaderState.Type)
            {
                bsonReader.ReadBsonType();
            }

            if (bsonReader.State == BsonReaderState.Name)
            {
                SetToken(NewtonsoftJsonToken.PropertyName, bsonReader.ReadName().UnescapeBson());
            }
            else if (bsonReader.State == BsonReaderState.Value)
            {
                switch (bsonReader.CurrentBsonType)
                {
                case BsonType.Document:
                    SetToken(NewtonsoftJsonToken.StartObject);
                    bsonReader.ReadStartDocument();
                    break;

                case BsonType.Array:
                    SetToken(NewtonsoftJsonToken.StartArray);
                    bsonReader.ReadStartArray();
                    break;

                case BsonType.Undefined:
                    SetToken(NewtonsoftJsonToken.Undefined);
                    bsonReader.ReadUndefined();
                    break;

                case BsonType.Null:
                    SetToken(NewtonsoftJsonToken.Null);
                    bsonReader.ReadNull();
                    break;

                case BsonType.String:
                    SetToken(NewtonsoftJsonToken.String, bsonReader.ReadString());
                    break;

                case BsonType.Binary:
                    SetToken(NewtonsoftJsonToken.Bytes, bsonReader.ReadBinaryData().Bytes);
                    break;

                case BsonType.Boolean:
                    SetToken(NewtonsoftJsonToken.Boolean, bsonReader.ReadBoolean());
                    break;

                case BsonType.DateTime:
                    SetToken(NewtonsoftJsonToken.Date, bsonReader.ReadDateTime());
                    break;

                case BsonType.Int32:
                    SetToken(NewtonsoftJsonToken.Integer, bsonReader.ReadInt32());
                    break;

                case BsonType.Int64:
                    SetToken(NewtonsoftJsonToken.Integer, bsonReader.ReadInt64());
                    break;

                case BsonType.Double:
                    SetToken(NewtonsoftJsonToken.Float, bsonReader.ReadDouble());
                    break;

                case BsonType.Decimal128:
                    SetToken(NewtonsoftJsonToken.Float, Decimal128.ToDouble(bsonReader.ReadDecimal128()));
                    break;

                default:
                    throw new NotSupportedException();
                }
            }
            else if (bsonReader.State == BsonReaderState.EndOfDocument)
            {
                SetToken(NewtonsoftJsonToken.EndObject);
                bsonReader.ReadEndDocument();
            }
            else if (bsonReader.State == BsonReaderState.EndOfArray)
            {
                SetToken(NewtonsoftJsonToken.EndArray);
                bsonReader.ReadEndArray();
            }

            if (bsonReader.State == BsonReaderState.Initial)
            {
                return(true);
            }

            return(!bsonReader.IsAtEndOfFile());
        }