Как вы собираетесь это сделать? Сбросить его в DataSet и сериализовать объекты в JSON? сделать массив и сделать то же самое? или автоматизировать сам Excel? (пожалуйста, не делайте этого). Есть много способов прочитать данные Excel и преобразовать их в объект JSON.

Здесь я собираюсь объяснить два варианта преобразования рабочего листа Excel в документ JSON.

Первый вариант — использование OLE DB Connection, а второй — использование библиотеки ExcelDataReader.

Вот как выглядит мой образец документа Excel.

Использование ОлеДбКоннектион

Раньше я читал и писал файлы Excel, используя Interop Objects. Поскольку он неуправляемый и из-за проблем с производительностью, я начал использовать OLE DB. Он относится к пространству имен System.Data.OleDb. В приведенном ниже примере я использую Microsoft ACE OLEDB 12.0 для чтения листа Excel и преобразования его в формат документа JSON; Microsoft ACE OLEDB 12.0 может подключаться к файлам Excel 2007 и более поздних версий с расширением .xlsx.

private static void UsingOleDb(string inFilePath, string outFilePath, string sheetName)
{
    //"HDR=Yes;" indicates that the first row contains column names, not data.
    var connectionString = $@"
        Provider=Microsoft.ACE.OLEDB.12.0;
        Data Source={inFilePath};
        Extended Properties=""Excel 12.0 Xml;HDR=YES""";
    using (var conn = new OleDbConnection(connectionString))
    {
        conn.Open();
        var cmd = conn.CreateCommand();
        cmd.CommandText = $@"SELECT * FROM [{sheetName}$]";
        using (var dr = cmd.ExecuteReader())
        {
            var query =
                (from DbDataRecord row in dr
                    select row).Select(x =>
                    {
                        var data = new Dictionary<string,object>
                            {
                                {dr.GetName(0), x[0]},
                                {dr.GetName(1), x[1]},
                                {dr.GetName(2), x[2]},
                                {dr.GetName(3), x[3]}                                           
                            };
                        return data;
                    });
     
                var json = JsonConvert.SerializeObject(query);
                File.WriteAllText(outFilePath, json);
        }
    }
}

Использование ExcelDataReader

ExcelDataReader — легкая и быстрая библиотека, написанная на C# для чтения файлов Microsoft Excel. Это действительно полезно; Мне потребовалось меньше часа, чтобы получить именно то, что я хотел.

private static void UsingExcelDataReader(string inputFile, string outputFile)
{
    using (var inFile = File.Open(inputFile, FileMode.Open, FileAccess.Read))
    using (var outFile = File.CreateText(outputFile))
    using (var reader = ExcelReaderFactory.CreateReader(inFile,
    new ExcelReaderConfiguration {FallbackEncoding = Encoding.GetEncoding(1252)}))
    using (var writer = new JsonTextWriter(outFile))
    {
        writer.Formatting = Formatting.Indented;
        writer.WriteStartArray();
        //You can skip the first row, as it contains the titles.
        reader.Read();
        do
        {
            while (reader.Read())
            {
                //We don't need an empty object
                var firstName = reader.GetString(0);
                if (string.IsNullOrEmpty(firstName)) break;
                 
                writer.WriteStartObject();
                //Select Columns and values
                writer.WritePropertyName("FirstName");
                writer.WriteValue(firstName);
                 
                writer.WritePropertyName("LastName");
                writer.WriteValue(reader.GetString(1));
                 
                writer.WritePropertyName("Gender");
                writer.WriteValue(reader.GetString(2));
                 
                writer.WritePropertyName("State");
                writer.WriteValue(reader.GetString(3));
                 
                writer.WriteEndObject();
            }
        } while (reader.NextResult());
         
        writer.WriteEndArray();
    }
}

Исходный код доступен на GitHub https://github.com/nidps/ExcelToJson