LS.FileReader
1.0.2
dotnet add package LS.FileReader --version 1.0.2
NuGet\Install-Package LS.FileReader -Version 1.0.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LS.FileReader" Version="1.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="LS.FileReader" Version="1.0.2" />
<PackageReference Include="LS.FileReader" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add LS.FileReader --version 1.0.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: LS.FileReader, 1.0.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package LS.FileReader@1.0.2
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=LS.FileReader&version=1.0.2
#tool nuget:?package=LS.FileReader&version=1.0.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
LS.FileReader
A lightweight C# utility to read CSV, Excel (XLSX), and JSON files into strongly-typed models using attribute-based mapping and optional streaming support.
- ✅ Supports
.csv
,.xlsx
,.json
- ✅ Attribute-based property mapping
- ✅
Read<T>()
for small files (sync, memory-based) - ✅
ReadAsync<T>()
for large files (async stream) - ✅ Built with clean architecture & extensibility
- ✨ Created with AI-assisted engineering (OpenAI ChatGPT)
- ⚙️ Powered by ExcelDataReader
🔧 Installation
dotnet add package LS.FileReader
🚀 Quick Start
1. Define your model with HeaderColumnAttribute
using LS.FileReader.Attributes;
public class PersonDto
{
[HeaderColumn("Name", "FullName")]
public string Name { get; set; }
[HeaderColumn("Age")]
public int Age { get; set; }
[HeaderColumn("DOB")]
public DateTime BirthDate { get; set; }
}
2. Use ILsFileReader.Read<T>()
to fully load and parse the file
var reader = new LsFileReader();
var result = reader.Read<PersonDto>(formFile); // Supports .csv, .xlsx, .json
foreach (var person in result.Data)
{
Console.WriteLine($"{person.Name}, {person.Age}");
}
foreach (var error in result.ErrorRows)
{
Console.WriteLine($"Row {error.RowIndex} failed: {error.Error}");
}
3. Use ReadAsync<T>()
for large files (streaming)
await foreach (var row in reader.ReadAsync<PersonDto>(formFile))
{
if (row.IsSuccess)
{
var person = row.Data;
// Process person
// Do something at here, add to db / signal r notify
}
else
{
Console.WriteLine($"Row {row.RowIndex} failed: {row.Error}");
}
}
4. Use ReadAsync<T>()
+ FileEstimateHelper
for large files (streaming) and batch process
var batch = new List<PersonDto>();
var batchSize = 100;
var lastNotifyTime = DateTime.UtcNow;
var estimatedTotalRows = 0;
await foreach (var row in reader.ReadAsync<PersonDto>(formFile))
{
if (!row.IsSuccess)
{
Console.WriteLine($"Row {row.RowIndex} failed: {row.Error}");
continue;
}
// Estimate total rows once (based on file size and column count)
if (estimatedTotalRows == 0)
{
estimatedTotalRows = FileEstimateHelper.EstimateTotalRows(formFile, row.ColumnCount);
}
batch.Add(row.Data);
if (batch.Count >= batchSize)
{
await db.SaveBatchAsync(batch); // Replace with your batch save logic
batch.Clear();
}
// Notify progress every 250ms
if ((DateTime.UtcNow - lastNotifyTime).TotalMilliseconds >= 250)
{
double percent = (double)row.RowIndex / estimatedTotalRows * 100;
await notifier.SendProgressAsync(connectionId, percent);
lastNotifyTime = DateTime.UtcNow;
}
}
// Flush remaining rows
if (batch.Count > 0)
{
await db.SaveBatchAsync(batch);
}
📂 Supported Formats
Format | Method | Notes |
---|---|---|
.csv |
Read<T>() , ReadAsync<T>() |
Header must match column/alias |
.xlsx |
Read<T>() , ReadAsync<T>() |
First sheet is used by default |
.json |
Read<T>() only |
Must be JSON array |
📘 Notes
- All file reads are limited to 10MB to avoid memory spikes.
- Property names are matched case-insensitively to headers or aliases.
- Internally uses
System.Text.Json
for JSON andExcelDataReader
for Excel files.
👤 Author
- Laoseng (developer)
- OpenAI ChatGPT (AI-assisted architecture & implementation)
📝 License
MIT License
Includes Excel parsing powered by ExcelDataReader (MIT)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- ExcelDataReader (>= 3.7.0)
- ExcelDataReader.DataSet (>= 3.7.0)
- Microsoft.AspNetCore.Http.Features (>= 5.0.17)
- Microsoft.Bcl.AsyncInterfaces (>= 9.0.6)
- System.Text.Encoding.CodePages (>= 9.0.6)
- System.Text.Json (>= 9.0.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.