Sylvan.AspNetCore.Mvc.Csv 0.1.0

The ID prefix of this package has been reserved for one of the owners of this package by Prefix Reserved
.NET 6.0
dotnet add package Sylvan.AspNetCore.Mvc.Csv --version 0.1.0
NuGet\Install-Package Sylvan.AspNetCore.Mvc.Csv -Version 0.1.0
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="Sylvan.AspNetCore.Mvc.Csv" Version="0.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Sylvan.AspNetCore.Mvc.Csv --version 0.1.0
#r "nuget: Sylvan.AspNetCore.Mvc.Csv, 0.1.0"
#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.
// Install Sylvan.AspNetCore.Mvc.Csv as a Cake Addin
#addin nuget:?package=Sylvan.AspNetCore.Mvc.Csv&version=0.1.0

// Install Sylvan.AspNetCore.Mvc.Csv as a Cake Tool
#tool nuget:?package=Sylvan.AspNetCore.Mvc.Csv&version=0.1.0


This package provides support for CSV responses and content negotiation for handling tabular data in ASP.NET Core web APIs. It allows a client to choose to send and receive CSV data by specifying text/csv for the ContentType or Accept HTTP headers.

JSON is a great format for serializing structured, heirarchical data. However, for purely rectangular, tabular data, JSON can become quite verbose as each property name must be repeated for each record in the dataset. CSV, on the other hand, only names each column once at the beginning of the output. This can greatly reduce the size of the payload if the dataset is large, while remaining relatively easy to process by most clients.

Using the WeatherForecast example that is delivered with the ASP.NET project template, with only 4 records returned the size of the payload is nearly halved by using CSV instead of JSON. The size reduction becomes even more significant as the size of the record set increases.

The default JSON response producing 367 bytes.


The CSV response produces only 198 bytes for the same data.



The input formatter can handle APIs that accept IDataReader, DbDataReader, or a type that implements IEnumerable<T> where T is some complex object. The default behavior will automatically detect a delimiter from the following list ,, \t, ;, or |, and expect a header row to be present. The client can specify a different delimiter by setting the Csv-Delimiter HTTP header on the request. The client can indicate that there are no headers by setting Csv-HasHeaders HTTP header to "false" or "0".

While IDataReader can be used as a parameter, using DbDataReader should be preferred. The IDataReader interface does not expose asynchronous operations, while the DbDataReader abstract class does.


The output formatter can handle API methods that return IDataReader, DbDataReader, or IEnumerable<T> where T is some complex object.


To enable the CSV formatter, add the Sylvan.AspNetCore.Mvc.Formatters.Csv nuget package to your project. This package transitively depends on Sylvan.Data.Csv for CSV processing and Sylvan.Data for binding to and from objects.

Register the CSV formatter with the MVC service in your application ConfigureServices.

services.AddControllers(opts => { opts.AddSylvanCsvFormatters(); });

This will register both the CsvInputFormatter as well as the CsvOutputFormatter. If you only want one or the other, they can be registered individually.

    opts =>
        opts.InputFormatters.Add(new CsvInputFormatter());
        opts.OutputFormatters.Add(new CsvOutputFormatter());
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  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-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.0 316 9/9/2023