Class JsonSingleStreamLoader<TRecord>
Loads items of type TRecord into a single JSON array stream.
public sealed class JsonSingleStreamLoader<TRecord> : LoaderBase<TRecord, JsonReport>, ILoadWithProgressAndCancellationAsync<TRecord, JsonReport>, ILoadWithProgressAsync<TRecord, JsonReport>, ILoadWithCancellationAsync<TRecord>, ILoadAsync<TRecord> where TRecord : notnull
Type Parameters
TRecordThe type of items to load. Must be
notnull.
- Inheritance
-
LoaderBase<TRecord, JsonReport>JsonSingleStreamLoader<TRecord>
- Implements
-
ILoadWithProgressAndCancellationAsync<TRecord, JsonReport>ILoadWithProgressAsync<TRecord, JsonReport>ILoadWithCancellationAsync<TRecord>ILoadAsync<TRecord>
- Inherited Members
-
LoaderBase<TRecord, JsonReport>.ReportingIntervalLoaderBase<TRecord, JsonReport>.CurrentItemCountLoaderBase<TRecord, JsonReport>.CurrentSkippedItemCountLoaderBase<TRecord, JsonReport>.MaximumItemCountLoaderBase<TRecord, JsonReport>.SkipItemCount
Examples
using var stream = File.Create("output.json");
var loader = new JsonSingleStreamLoader<Person>(stream);
await loader.LoadAsync(items, cancellationToken);
Remarks
Writes a JSON array (e.g. [{"name":"Alice"},{"name":"Bob"}]) to a Stream
by serializing each item from the input async enumerable sequence.
Constructors
JsonSingleStreamLoader(Stream)
Initializes a new instance of the JsonSingleStreamLoader<TRecord> class.
public JsonSingleStreamLoader(Stream stream)
Parameters
streamStreamThe stream to write the JSON array to.
Exceptions
- ArgumentNullException
Thrown when
streamisnull.
JsonSingleStreamLoader(Stream, ILogger<JsonSingleStreamLoader<TRecord>>)
Initializes a new instance of the JsonSingleStreamLoader<TRecord> class with diagnostic logging.
public JsonSingleStreamLoader(Stream stream, ILogger<JsonSingleStreamLoader<TRecord>> logger)
Parameters
streamStreamThe stream to write the JSON array to.
loggerILogger<JsonSingleStreamLoader<TRecord>>The logger instance for diagnostic output.
Exceptions
- ArgumentNullException
Thrown when
streamorloggerisnull.
JsonSingleStreamLoader(Stream, JsonSerializerOptions, ILogger<JsonSingleStreamLoader<TRecord>>?)
Initializes a new instance of the JsonSingleStreamLoader<TRecord> class with custom serialization options.
public JsonSingleStreamLoader(Stream stream, JsonSerializerOptions options, ILogger<JsonSingleStreamLoader<TRecord>>? logger = null)
Parameters
streamStreamThe stream to write the JSON array to.
optionsJsonSerializerOptionsThe JSON serializer options to use for serialization.
loggerILogger<JsonSingleStreamLoader<TRecord>>An optional logger instance for diagnostic output.
Exceptions
- ArgumentNullException
Thrown when
streamoroptionsisnull.
JsonSingleStreamLoader(Stream, JsonTypeInfo<TRecord>, ILogger<JsonSingleStreamLoader<TRecord>>?)
Initializes a new instance of the JsonSingleStreamLoader<TRecord> class with source-generated type metadata for AOT-friendly, reflection-free serialization.
public JsonSingleStreamLoader(Stream stream, JsonTypeInfo<TRecord> typeInfo, ILogger<JsonSingleStreamLoader<TRecord>>? logger = null)
Parameters
streamStreamThe stream to write the JSON array to.
typeInfoJsonTypeInfo<TRecord>The source-generated type metadata for
TRecord.loggerILogger<JsonSingleStreamLoader<TRecord>>An optional logger instance for diagnostic output.
Exceptions
- ArgumentNullException
Thrown when
streamortypeInfoisnull.
Methods
CreateProgressReport()
Creates a progress report of type TProgress. This gives the derived class the opportunity to implement a custom progress report that is specific to the loading process.
protected override JsonReport CreateProgressReport()
Returns
- JsonReport
Progress of type TProgress
CreateProgressTimer(IProgress<JsonReport>)
Creates the Wolfgang.Etl.Abstractions.IProgressTimer used to drive progress callbacks. Override this method in a derived class to inject a custom timer (for example, a custom implementation that allows manual control in unit tests).
protected override IProgressTimer CreateProgressTimer(IProgress<JsonReport> progress)
Parameters
progressIProgress<JsonReport>The progress sink that will receive callbacks.
Returns
- IProgressTimer
A started Wolfgang.Etl.Abstractions.IProgressTimer instance.
LoadWorkerAsync(IAsyncEnumerable<TRecord>, CancellationToken)
This method is the core implementation of the loading logic and should be overridden by derived classes.
protected override Task LoadWorkerAsync(IAsyncEnumerable<TRecord> items, CancellationToken token)
Parameters
itemsIAsyncEnumerable<TRecord>The items to be loaded to the destination.
tokenCancellationTokenA CancellationToken to observe while waiting for the task to complete.
Returns
- Task
A task representing the asynchronous operation.
Remarks
Items may be an empty sequence if no data is available or if the loading fails.
Exceptions
- ArgumentNullException
Argument items is null