private void WriteEscapedString(string value) { EnsureWriteBuffer(); var bufferPool = _arrayPool; if (value != null) { int lastWritePosition = 0; for (int i = 0; i < value.Length; i++) { var c = value[i]; if (c < _charEscapeFlags.Length && !_charEscapeFlags[c]) { continue; } string escapedValue = null; if (c < _charEscapeFlags.Length) { escapedValue = $"{Grammar.ReleaseCharacter.Value}{c}"; } else { escapedValue = null; } if (escapedValue == null) { continue; } if (i > lastWritePosition) { int length = i - lastWritePosition; int start = 0; if (_writeBuffer == null || _writeBuffer.Length < length) { char[] newBuffer = BufferUtils.RentBuffer(bufferPool, length); BufferUtils.ReturnBuffer(bufferPool, _writeBuffer); _writeBuffer = newBuffer; } value.CopyTo(lastWritePosition, _writeBuffer, start, length - start); // write unchanged chars before writing escaped text _writer.Write(_writeBuffer, start, length - start); } lastWritePosition = i + 1; _writer.Write(escapedValue); } if (lastWritePosition == 0) { // no escaped text, write entire string _writer.Write(value); } else { int length = value.Length - lastWritePosition; if (_writeBuffer == null || _writeBuffer.Length < length) { _writeBuffer = BufferUtils.EnsureBufferSize(bufferPool, length, _writeBuffer); } value.CopyTo(lastWritePosition, _writeBuffer, 0, length); // write remaining text _writer.Write(_writeBuffer, 0, length); } } else { WriteNull(); } }