JSON CSV конвертер на C#

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена конвертеру JSON и CSV на C# — чтение, запись и преобразование форматов.

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.

Теория и соседние материалы

JSON CSV конвертер на C#

JSON CSV конвертер — это утилита, преобразующая данные между двумя популярными форматами: JSON (JavaScript Object Notation) и CSV (Comma-Separated Values). Такой инструмент полезен при миграции данных, экспорте отчётов, интеграции систем и подготовке данных для анализа. В .NET существует несколько подходов к реализации подобного конвертера, включая использование встроенных средств и сторонних библиотек.


Архитектурные ограничения форматов

  • JSON — иерархический формат, поддерживающий вложенные объекты и массивы.
  • CSV — табличный формат с фиксированным набором колонок и строками записей.

Прямое преобразование возможно только для плоских JSON-структур, где каждый объект содержит одинаковый набор скалярных свойств. Вложенные объекты или массивы требуют предварительного "выравнивания" (flattening).


Простая реализация без внешних зависимостей

Для демонстрации базового принципа используется Система.Text.Json (встроен в .NET 6+) и ручная обработка CSV.


Шаг 1: Модель данных

public class Person
{
    public string Name { get; set; } = string.Empty;
    public int Age { get; set; }
    public string Email { get; set; } = string.Empty;
}

Шаг 2: Конвертер JSON → CSV


Шаг 3: Конвертер CSV → JSON


Шаг 4: Использование


Расширенная реализация с поддержкой динамических структур

Для обработки произвольного JSON без жёстко заданной модели используется JsonDocument.


JSON → CSV (динамически)

Эта версия работает с любым плоским JSON-массивом объектов, не требуя предварительного определения класса.


Использование сторонней библиотеки: CsvHelper

Для надёжной обработки CSV рекомендуется использовать проверенную библиотеку CsvHelper.


Установка

dotnet add package CsvHelper

Пример: JSON → CSV через CsvHelper

CsvHelper автоматически:

  • Генерирует заголовки из имён свойств.
  • Экранирует специальные символы.
  • Поддерживает локализацию, кастомные маппинги, вложенные объекты (через индексацию).

Обработка ошибок и ограничений

  • Вложенные объекты: { "address": { "city": "Москва" } } не могут быть напрямую преобразованы в CSV. Требуется flattening: address.city.
  • Массивы: [1, 2, 3] внутри объекта нарушают табличную структуру.
  • Несогласованные поля: разные объекты с разным набором свойств приведут к некорректному CSV.
  • Кодировка: используйте UTF-8 с BOM для совместимости с Excel.

Практические рекомендации

  • Для простых случаев — достаточно встроенного Система.Text.Json и ручной CSV-логики.
  • Для production-кода — применяйте CsvHelper или аналоги (TinyCsvParser, ChoETL).
  • Всегда валидируйте входные данные перед конвертацией.
  • При работе с большими файлами — используйте потоковую обработку (Stream, JsonDocument), чтобы избежать переполнения памяти.