public BsonJsonWriter(
     TextWriter writer,
     BsonJsonWriterSettings settings
 )
 {
     this.textWriter = writer;
     this.settings = settings;
     context = new BsonJsonWriterContext(null, ContextType.TopLevel, "");
     state = BsonWriteState.Initial;
 }
 public BsonJsonWriter(
     TextWriter writer,
     BsonJsonWriterSettings settings
 )
 {
     this.textWriter = writer;
     this.settings = settings;
     context = null;
     state = BsonWriteState.Initial;
 }
 public override void Close()
 {
     // Close can be called on Disposed objects
     if (state != BsonWriteState.Closed) {
         Flush();
         if (settings.CloseOutput) {
             textWriter.Close();
         }
         context = null;
         state = BsonWriteState.Closed;
     }
 }
        public override void WriteStartDocument()
        {
            if (disposed) { throw new ObjectDisposedException("BsonJsonWriter"); }
            if (state != BsonWriteState.Value && state != BsonWriteState.Initial && state != BsonWriteState.ScopeDocument) {
                var message = string.Format("WriteStartDocument cannot be called when WriterState is: {0}", state);
                throw new InvalidOperationException(message);
            }

            if (state == BsonWriteState.Value || state == BsonWriteState.ScopeDocument) {
                WriteNameHelper(name);
            }
            textWriter.Write("{");

            var contextType = (state == BsonWriteState.ScopeDocument) ? ContextType.ScopeDocument : ContextType.Document;
            context = new BsonJsonWriterContext(context, contextType, settings.IndentChars);
            state = BsonWriteState.Name;
        }
        public override void WriteStartArray()
        {
            if (disposed) { throw new ObjectDisposedException("BsonJsonWriter"); }
            if (state != BsonWriteState.Value && state != BsonWriteState.Initial) {
                var message = string.Format("WriteStartArray cannot be called when WriterState is: {0}", state);
                throw new InvalidOperationException(message);
            }

            WriteNameHelper(name);
            textWriter.Write("[");

            context = new BsonJsonWriterContext(context, ContextType.Array, settings.IndentChars);
            state = BsonWriteState.Value;
        }
        public override void WriteEndDocument()
        {
            if (disposed) { throw new ObjectDisposedException("BsonJsonWriter"); }
            if (state != BsonWriteState.Name) {
                var message = string.Format("WriteDateTime cannot be called when WriterState is: {0}", state);
                throw new InvalidOperationException(message);
            }

            if (settings.Indent && context.HasElements) {
                textWriter.Write(settings.NewLineChars);
                if (context.ParentContext != null) {
                    textWriter.Write(context.ParentContext.Indentation);
                }
                textWriter.Write("}");
            } else {
                textWriter.Write(" }");
            }

            if (context.ContextType == ContextType.ScopeDocument) {
                context = context.ParentContext;
                WriteEndDocument();
            } else {
                context = context.ParentContext;
            }

            if (context == null) {
                state = BsonWriteState.Done;
            } else {
                state = GetNextState();
            }
        }
        public override void WriteEndArray()
        {
            if (disposed) { throw new ObjectDisposedException("BsonJsonWriter"); }
            if (state != BsonWriteState.Value) {
                var message = string.Format("WriteEndArray cannot be called when WriterState is: {0}", state);
                throw new InvalidOperationException(message);
            }

            textWriter.Write("]");

            context = context.ParentContext;
            state = GetNextState();
        }