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); }
public NewtonsoftNdjsonWriter(TextWriter textResponseStreamWriter, JsonSerializerSettings jsonSerializerSettings, NewtonsoftNdjsonArrayPool jsonArrayPool) { _textResponseStreamWriter = textResponseStreamWriter; _jsonResponseStreamWriter = new JsonTextWriter(textResponseStreamWriter) { ArrayPool = jsonArrayPool, CloseOutput = false, AutoCompleteOnClose = false }; _jsonSerializer = JsonSerializer.Create(jsonSerializerSettings); }
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); } }