Example #1
0
        public NewtonsoftNdjsonWriterFactory(IHttpResponseStreamWriterFactory httpResponseStreamWriterFactory, IOptions <MvcNewtonsoftJsonOptions> options, ArrayPool <char> innerJsonArrayPool)
        {
            _httpResponseStreamWriterFactory = httpResponseStreamWriterFactory ?? throw new ArgumentNullException(nameof(httpResponseStreamWriterFactory));
            _options = options?.Value ?? throw new ArgumentNullException(nameof(options));

            if (innerJsonArrayPool == null)
            {
                throw new ArgumentNullException(nameof(innerJsonArrayPool));
            }

            _jsonArrayPool = new NewtonsoftNdjsonArrayPool(innerJsonArrayPool);
        }
Example #2
0
            public NewtonsoftNdjsonWriter(TextWriter textResponseStreamWriter, JsonSerializerSettings jsonSerializerSettings, NewtonsoftNdjsonArrayPool jsonArrayPool)
            {
                _textResponseStreamWriter = textResponseStreamWriter;

                _jsonResponseStreamWriter = new JsonTextWriter(textResponseStreamWriter)
                {
                    ArrayPool           = jsonArrayPool,
                    CloseOutput         = false,
                    AutoCompleteOnClose = false
                };

                _jsonSerializer = JsonSerializer.Create(jsonSerializerSettings);
            }
Example #3
0
            public async Task SerializeAsync(object?asyncEnumerable, TextWriter textResponseStreamWriter, JsonSerializerSettings jsonSerializerSettings, NewtonsoftNdjsonArrayPool jsonArrayPool, CancellationToken cancellationToken)
            {
                IAsyncEnumerable <T>?values = asyncEnumerable as IAsyncEnumerable <T>;

                if (values is null)
                {
                    throw new NotSupportedException($"The only type supported by {nameof(NewtonsoftNdjsonOutputFormatter)} is IAsyncEnumerable<T>");
                }

                using INdjsonWriter <T> ndjsonTextWriter = new NewtonsoftNdjsonWriter <T>(textResponseStreamWriter, jsonSerializerSettings, jsonArrayPool);

                await foreach (T value in values.WithCancellation(cancellationToken))
                {
                    await ndjsonTextWriter.WriteAsync(value, cancellationToken);
                }
            }