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