/// <summary> /// Reads the end of a BSON array from the reader. /// </summary> public override void ReadEndArray() { if (disposed) { ThrowObjectDisposedException(); } if (context.ContextType != ContextType.Array) { var message = string.Format("ReadEndArray cannot be called when ContextType is: {0}", context.ContextType); throw new InvalidOperationException(message); } if (state == BsonReaderState.Type) { ReadBsonType(); // will set state to EndOfArray if at end of array } if (state != BsonReaderState.EndOfArray) { var message = string.Format("ReadEndArray cannot be called when State is: {0}", state); throw new InvalidOperationException(message); } context = context.PopContext(); switch (context.ContextType) { case ContextType.Array: state = BsonReaderState.Type; break; case ContextType.Document: state = BsonReaderState.Type; break; case ContextType.TopLevel: state = BsonReaderState.Done; break; default: throw new BsonInternalException("Unexpected ContextType"); } if (context.ContextType == ContextType.Array || context.ContextType == ContextType.Document) { var commaToken = PopToken(); if (commaToken.Type != JsonTokenType.Comma) { PushToken(commaToken); } } }
/// <summary> /// Reads the end of a BSON array from the reader. /// </summary> public override void ReadEndArray() { if (disposed) { ThrowObjectDisposedException(); } if (context.ContextType != ContextType.Array) { ThrowInvalidContextType("ReadEndArray", context.ContextType, ContextType.Array); } if (state == BsonReaderState.Type) { ReadBsonType(); // will set state to EndOfArray if at end of array } if (state != BsonReaderState.EndOfArray) { ThrowInvalidState("ReadEndArray", BsonReaderState.EndOfArray); } context = context.PopContext(); switch (context.ContextType) { case ContextType.Array: state = BsonReaderState.Type; break; case ContextType.Document: state = BsonReaderState.Type; break; case ContextType.TopLevel: state = BsonReaderState.Done; break; default: throw new BsonInternalException("Unexpected ContextType."); } if (context.ContextType == ContextType.Array || context.ContextType == ContextType.Document) { var commaToken = PopToken(); if (commaToken.Type != JsonTokenType.Comma) { PushToken(commaToken); } } }
/// <summary> /// Reads the end of a BSON document from the reader. /// </summary> public override void ReadEndDocument() { if (disposed) { ThrowObjectDisposedException(); } if ( context.ContextType != ContextType.Document && context.ContextType != ContextType.ScopeDocument ) { var message = string.Format("ReadEndDocument cannot be called when ContextType is: {0}", context.ContextType); throw new InvalidOperationException(message); } if (state == BsonReaderState.Type) { ReadBsonType(); // will set state to EndOfDocument if at end of document } if (state != BsonReaderState.EndOfDocument) { var message = string.Format("ReadEndDocument cannot be called when State is: {0}", state); throw new InvalidOperationException(message); } context = context.PopContext(); if (context != null && context.ContextType == ContextType.JavaScriptWithScope) { context = context.PopContext(); // JavaScriptWithScope VerifyToken("}"); // outermost closing bracket for JavaScriptWithScope } switch (context.ContextType) { case ContextType.Array: state = BsonReaderState.Type; break; case ContextType.Document: state = BsonReaderState.Type; break; case ContextType.TopLevel: state = BsonReaderState.Done; break; default: throw new BsonInternalException("Unexpected ContextType"); } if (context.ContextType == ContextType.Array || context.ContextType == ContextType.Document) { var commaToken = PopToken(); if (commaToken.Type != JsonTokenType.Comma) { PushToken(commaToken); } } }
/// <summary> /// Reads the end of a BSON document from the reader. /// </summary> public override void ReadEndDocument() { if (disposed) { ThrowObjectDisposedException(); } if ( context.ContextType != ContextType.Document && context.ContextType != ContextType.ScopeDocument ) { ThrowInvalidContextType("ReadEndDocument", context.ContextType, ContextType.Document, ContextType.ScopeDocument); } if (state == BsonReaderState.Type) { ReadBsonType(); // will set state to EndOfDocument if at end of document } if (state != BsonReaderState.EndOfDocument) { ThrowInvalidState("ReadEndDocument", BsonReaderState.EndOfDocument); } context = context.PopContext(); if (context != null && context.ContextType == ContextType.JavaScriptWithScope) { context = context.PopContext(); // JavaScriptWithScope VerifyToken("}"); // outermost closing bracket for JavaScriptWithScope } switch (context.ContextType) { case ContextType.Array: state = BsonReaderState.Type; break; case ContextType.Document: state = BsonReaderState.Type; break; case ContextType.TopLevel: state = BsonReaderState.Done; break; default: throw new BsonInternalException("Unexpected ContextType"); } if (context.ContextType == ContextType.Array || context.ContextType == ContextType.Document) { var commaToken = PopToken(); if (commaToken.Type != JsonTokenType.Comma) { PushToken(commaToken); } } }