EnumerableExtensions.Exporters
1.0.0.2
dotnet add package EnumerableExtensions.Exporters --version 1.0.0.2
NuGet\Install-Package EnumerableExtensions.Exporters -Version 1.0.0.2
<PackageReference Include="EnumerableExtensions.Exporters" Version="1.0.0.2" />
<PackageVersion Include="EnumerableExtensions.Exporters" Version="1.0.0.2" />
<PackageReference Include="EnumerableExtensions.Exporters" />
paket add EnumerableExtensions.Exporters --version 1.0.0.2
#r "nuget: EnumerableExtensions.Exporters, 1.0.0.2"
#:package EnumerableExtensions.Exporters@1.0.0.2
#addin nuget:?package=EnumerableExtensions.Exporters&version=1.0.0.2
#tool nuget:?package=EnumerableExtensions.Exporters&version=1.0.0.2
EnumerableExtensions.Exporters
Language / Idioma: English | Español
A small .NET library that adds extension methods to IEnumerable<T> so collections can be exported to JSON, compressed JSON, MessagePack, and compressed MessagePack.
<a id="english"></a>
English
Overview
EnumerableExtensions.Exporters provides async extension methods for exporting any IEnumerable<T> to disk in multiple formats.
Available extension methods:
ExportToJsonExportToCompressedJsonExportToMessagePackExportToCompressedMessagePack
You can use them directly or resolve the exporter through dependency injection.
Installation
Add the package reference to your project:
<PackageReference Include="EnumerableExtensions.Exporters" Version="x.y.z" />
Or reference the project directly during local development.
Namespace
using EnumerableExtensions.Exporters.Extensions;
Basic usage
using EnumerableExtensions.Exporters.Extensions;
var people = new[]
{
new Person(1, "Ada"),
new Person(2, "Grace"),
new Person(3, "Linus")
};
await people.ExportToJson("exports/people.json");
await people.ExportToCompressedJson("exports/people.json.gz");
await people.ExportToMessagePack("exports/people.mpack");
await people.ExportToCompressedMessagePack("exports/people.mpack.gz");
public sealed record Person(int Id, string Name);
Usage with dependency injection
If you already use Microsoft.Extensions.DependencyInjection, register the service like this:
using EnumerableExtensions.Exporters.Extensions;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddExporterService();
using var serviceProvider = services.BuildServiceProvider();
var people = new[]
{
new Person(1, "Ada"),
new Person(2, "Grace")
};
await people.ExportToJson("exports/people.json", serviceProvider);
public sealed record Person(int Id, string Name);
Output formats
JSON
Creates a plain JSON file.
await people.ExportToJson("exports/people.json");
Compressed JSON
Creates a GZip-compressed JSON file.
await people.ExportToCompressedJson("exports/people.json.gz");
MessagePack
Creates a compact binary file using MessagePack.
await people.ExportToMessagePack("exports/people.mpack");
Compressed MessagePack
Creates a GZip-compressed MessagePack file.
await people.ExportToCompressedMessagePack("exports/people.mpack.gz");
Behavior notes
- All export operations are asynchronous.
- Target directories are created automatically when needed.
filePathcannot be null, empty, or whitespace.datacannot be null.- If no
IServiceProvideris provided, the library uses its internal exporter service.
Typical scenarios
This library is useful when you need to:
- save query results to disk
- archive collections in compact formats
- generate export files from background jobs
- reuse export behavior through DI in application services
<a id="espanol"></a>
Español
Descripción general
EnumerableExtensions.Exporters proporciona métodos de extensión asíncronos para exportar cualquier IEnumerable<T> a disco en varios formatos.
Métodos de extensión disponibles:
ExportToJsonExportToCompressedJsonExportToMessagePackExportToCompressedMessagePack
Puedes usarlos directamente o resolver el exportador mediante inyección de dependencias.
Instalación
Agrega la referencia del paquete a tu proyecto:
<PackageReference Include="EnumerableExtensions.Exporters" Version="x.y.z" />
O referencia el proyecto directamente durante el desarrollo local.
Namespace
using EnumerableExtensions.Exporters.Extensions;
Uso básico
using EnumerableExtensions.Exporters.Extensions;
var people = new[]
{
new Person(1, "Ada"),
new Person(2, "Grace"),
new Person(3, "Linus")
};
await people.ExportToJson("exports/people.json");
await people.ExportToCompressedJson("exports/people.json.gz");
await people.ExportToMessagePack("exports/people.mpack");
await people.ExportToCompressedMessagePack("exports/people.mpack.gz");
public sealed record Person(int Id, string Name);
Uso con inyección de dependencias
Si ya usas Microsoft.Extensions.DependencyInjection, registra el servicio así:
using EnumerableExtensions.Exporters.Extensions;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddExporterService();
using var serviceProvider = services.BuildServiceProvider();
var people = new[]
{
new Person(1, "Ada"),
new Person(2, "Grace")
};
await people.ExportToJson("exports/people.json", serviceProvider);
public sealed record Person(int Id, string Name);
Formatos de salida
JSON
Crea un archivo JSON plano.
await people.ExportToJson("exports/people.json");
JSON comprimido
Crea un archivo JSON comprimido con GZip.
await people.ExportToCompressedJson("exports/people.json.gz");
MessagePack
Crea un archivo binario compacto usando MessagePack.
await people.ExportToMessagePack("exports/people.mpack");
MessagePack comprimido
Crea un archivo MessagePack comprimido con GZip.
await people.ExportToCompressedMessagePack("exports/people.mpack.gz");
Notas de comportamiento
- Todas las operaciones de exportación son asíncronas.
- Los directorios de destino se crean automáticamente cuando es necesario.
filePathno puede ser nulo, vacío ni contener solo espacios.datano puede ser nulo.- Si no se proporciona
IServiceProvider, la librería usa su servicio exportador interno.
Escenarios típicos
Esta librería es útil cuando necesitas:
- guardar resultados de consultas en disco
- archivar colecciones en formatos compactos
- generar archivos de exportación desde procesos en segundo plano
- reutilizar el comportamiento de exportación mediante DI en servicios de aplicación
About me
My name is José David Galviz Muñoz
Entrepreneur, Software Architect, Frontend and Backend Developer and Much More!!!
I started in the world of programming in 1992, since then it has been a journey full of many challenges and emotions.
- 🌍 I'm based in Barranquilla, Colombia.
- ✉️ You can contact me at jose.david.galviz@gmail.com
- 🚀 I'm currently working on Gasolutions
- 🤝 I'm open to collaborating on interesting projects open sources and commercials.
- ⚡ If you need me, email me!!!
Skills
<p align="left"> <a href="https://docs.microsoft.com/en-us/dotnet/csharp/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/csharp-colored.svg" width="36" height="36" alt="C#" /></a><a href="https://git-scm.com/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/git-colored.svg" width="36" height="36" alt="Git" /></a><a href="https://code.visualstudio.com/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/visualstudiocode.svg" width="36" height="36" alt="VS Code" /></a><a href="https://developer.mozilla.org/en-US/docs/Glossary/HTML5" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/html5-colored.svg" width="36" height="36" alt="HTML5" /></a><a href="https://jquery.com/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/jquery-colored.svg" width="36" height="36" alt="JQuery" /></a><a href="https://mui.com/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/materialui-colored.svg" width="36" height="36" alt="Material UI" /></a><a href="https://getbootstrap.com/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/bootstrap-colored.svg" width="36" height="36" alt="Bootstrap" /></a><a href="https://www.adobe.com/uk/products/premiere.html" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/premierepro-colored.svg" width="36" height="36" alt="Premiere Pro" /></a><a href="https://wix.com" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/wix-colored.svg" width="36" height="36" alt="Wix" /></a><a href="https://dotnet.microsoft.com/en-us/" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/skills/dot-net-colored.svg" width="36" height="36" alt=".NET" /></a> </p>
Socials
<p align="left"> <a href="https://www.dev.to/jgalviz" target="_blank" rel="noreferrer"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/devdotto-dark.svg" /> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/devdotto.svg" /> <img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/devdotto.svg" width="32" height="32" /> </picture> </a> <a href="https://www.github.com/jgalviz1974" target="_blank" rel="noreferrer"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/github-dark.svg" /> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/github.svg" /> <img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/github.svg" width="32" height="32" /> </picture> </a> <a href="https://www.linkedin.com/in/jgalviz" target="_blank" rel="noreferrer"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/linkedin-dark.svg" /> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/linkedin.svg" /> <img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/linkedin.svg" width="32" height="32" /> </picture> </a> <a href="https://medium.com/@jgalviz_1568" target="_blank" rel="noreferrer"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/medium-dark.svg" /> <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/medium.svg" /> <img src="https://raw.githubusercontent.com/danielcranney/readme-generator/main/public/icons/socials/medium.svg" width="32" height="32" /> </picture> </a></p>
Badges
<b>My GitHub Stats</b>
<a href="http://www.github.com/jgalviz1974"><img src="https://github-readme-streak-stats.herokuapp.com/?user=jgalviz1974&stroke=ffffff&background=1c1917&ring=0891b2&fire=0891b2&currStreakNum=ffffff&currStreakLabel=0891b2&sideNums=ffffff&sideLabels=ffffff&dates=ffffff&hide_border=true" /></a>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. 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. |
-
net9.0
- MessagePack (>= 2.5.187)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
# CHANGELOG - EnumerableExtensions.Exporters
## [1.0.0.1]
- Added the ExportToCompressedMessagePackAsync method for asynchronous GZip-compressed MessagePack exports.
## [1.0.0.0]
- Initial release.