Try it yourself with our free Json To Csv tool — runs entirely in your browser, no signup needed.

How to Convert CSV to JSON in C#

How to convert CSV to JSON in C#

Converting CSV (Comma Separated Values) to JSON (JavaScript Object Notation) is a common task in data processing and integration. CSV files are widely used for storing and exchanging data, while JSON is a popular format for data exchange and consumption by web and mobile applications. In this article, we will explore how to convert CSV to JSON in C#.

Quick Example

Here is a minimal example that converts a CSV file to JSON:

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;

class Program
{
    static void Main(string[] args)
    {
        string csvFile = "data.csv";
        string jsonFile = "data.json";

        var csvLines = File.ReadAllLines(csvFile);
        var json = new List<Dictionary<string, string>>();

        foreach (var line in csvLines)
        {
            var values = line.Split(',');
            var dict = new Dictionary<string, string>();
            for (int i = 0; i < values.Length; i++)
            {
                dict.Add($"Column {i}", values[i].Trim());
            }
            json.Add(dict);
        }

        File.WriteAllText(jsonFile, JsonConvert.SerializeObject(json, Formatting.Indented));
    }
}

This code reads a CSV file, splits each line into values, creates a dictionary for each line, and serializes the list of dictionaries to JSON.

Step-by-Step Breakdown

Let's walk through the code:

  1. We import the necessary namespaces: System, System.Collections.Generic, System.IO, and Newtonsoft.Json.
  2. We define the input and output file names.
  3. We read all lines from the CSV file using File.ReadAllLines.
  4. We create an empty list to store the JSON data.
  5. We iterate over each line in the CSV file.
  6. For each line, we split the values using line.Split(',').
  7. We create a dictionary to store the values for each line.
  8. We iterate over the values and add them to the dictionary with a key in the format "Column X".
  9. We add the dictionary to the list of JSON data.
  10. We serialize the list of dictionaries to JSON using JsonConvert.SerializeObject and write it to the output file.

Handling Edge Cases

Empty/Null Input

To handle empty or null input, we can add a check at the beginning of the code:

if (string.IsNullOrEmpty(csvFile) || !File.Exists(csvFile))
{
    Console.WriteLine("Input file not found or empty.");
    return;
}

Invalid Input

To handle invalid input, we can use a try-catch block to catch any exceptions that occur during the conversion process:

try
{
    // conversion code here
}
catch (Exception ex)
{
    Console.WriteLine($"Error converting CSV to JSON: {ex.Message}");
}

Large Input

To handle large input files, we can use a streaming approach instead of reading the entire file into memory:

using (var csvReader = new StreamReader(csvFile))
{
    using (var jsonWriter = new StreamWriter(jsonFile))
    {
        string line;
        while ((line = csvReader.ReadLine()) != null)
        {
            // process each line here
        }
    }
}

Unicode/Special Characters

To handle Unicode or special characters, we can use the Encoding.UTF8 encoding when reading and writing the files:

using (var csvReader = new StreamReader(csvFile, Encoding.UTF8))
{
    // ...
}

Common Mistakes

Mistake 1: Not Handling Edge Cases

// wrong code
string csvFile = "data.csv";
var csvLines = File.ReadAllLines(csvFile);
// ...
// corrected code
string csvFile = "data.csv";
if (string.IsNullOrEmpty(csvFile) || !File.Exists(csvFile))
{
    Console.WriteLine("Input file not found or empty.");
    return;
}
var csvLines = File.ReadAllLines(csvFile);

Mistake 2: Not Using a Try-Catch Block

// wrong code
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
// corrected code
try
{
    var json = JsonConvert.SerializeObject(data, Formatting.Indented);
}
catch (Exception ex)
{
    Console.WriteLine($"Error serializing JSON: {ex.Message}");
}

Mistake 3: Not Using the Correct Encoding

// wrong code
using (var csvReader = new StreamReader(csvFile))
{
    // ...
}
// corrected code
using (var csvReader = new StreamReader(csvFile, Encoding.UTF8))
{
    // ...
}

Performance Tips

  1. Use a streaming approach to handle large input files.
  2. Use JsonConvert.SerializeObject with the Formatting.None option to improve performance.
  3. Use File.WriteAllLines instead of File.WriteAllText to write the JSON data.

FAQ

Q: What is the best way to handle large CSV files?

A: Use a streaming approach to handle large input files.

Q: How can I handle Unicode or special characters in the CSV file?

A: Use the Encoding.UTF8 encoding when reading and writing the files.

Q: What is the best way to serialize the JSON data?

A: Use JsonConvert.SerializeObject with the Formatting.None option.

Q: How can I handle edge cases such as empty or null input?

A: Add checks at the beginning of the code to handle empty or null input.

Q: What is the best way to write the JSON data to a file?

A: Use File.WriteAllLines instead of File.WriteAllText.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp