Saltar al contenido

JSON string a CSV y conversión de CSV a JSON en C#

Te sugerimos que revises esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.

Solución:

Pude resolverlo deserializeObject en una tabla de datos usando Json.net, así que quiero publicar mi propia respuesta pero no la marcaré como aceptada, si alguien tiene una mejor manera de hacerlo.

Para convertir JSON string a tabla de datos

public static DataTable jsonStringToTable(string jsonContent)
        
            DataTable dt = JsonConvert.DeserializeObject(jsonContent);
            return dt;
        

Para hacer CSV string

public static string jsonToCSV(string jsonContent, string delimiter)
        
            StringWriter csvString = new StringWriter();
            using (var csv = new CsvWriter(csvString))
            
                csv.Configuration.SkipEmptyRecords = true;
                csv.Configuration.WillThrowOnMissingField = false;
                csv.Configuration.Delimiter = delimiter;

                using (var dt = jsonStringToTable(jsonContent))
                
                    foreach (DataColumn column in dt.Columns)
                    
                        csv.WriteField(column.ColumnName);
                    
                    csv.NextRecord();

                    foreach (DataRow row in dt.Rows)
                    
                        for (var i = 0; i < dt.Columns.Count; i++)
                        
                            csv.WriteField(row[i]);
                        
                        csv.NextRecord();
                    
                
            
            return csvString.ToString();
        

Uso final en API web

string csv = jsonToCSV(content, ",");

                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new StringContent(csv);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")  FileName = "export.csv" ;
                return result;

No sé si es demasiado tarde para informar la solución a su pregunta. En caso de que desee explorar la biblioteca de código abierto para hacer el trabajo, aquí hay una

Cinchoo ETL facilita la conversión de JSON a csv con pocas líneas de código

using (var r = new ChoJSONReader("sample.json"))

    using (var w = new ChoCSVWriter("sample.csv").WithFirstLineHeader())
    
        w.Write(r);
    

Para obtener más información/fuente, vaya a https://github.com/Cinchoo/ChoETL

Paquete Nuget:

.NET Framework:

      Install-Package ChoETL.JSON

Núcleo de .NET:

      Install-Package ChoETL.JSON.NETStandard

Divulgación completa: soy el autor de esta biblioteca.

Tuve el mismo problema recientemente y creo que hay una solución un poco más elegante usando System.Dynamic.ExpandoObject y CsvHelper. Es menos código y, con suerte, el rendimiento es similar o mejor en comparación con DataTable.

    public static string JsonToCsv(string jsonContent, string delimiter)
    
        var expandos = JsonConvert.DeserializeObject(jsonContent);

        using (var writer = new StringWriter())
        
            using (var csv = new CsvWriter(writer))
            
                csv.Configuration.Delimiter = delimiter;

                csv.WriteRecords(expandos as IEnumerable);
            

            return writer.ToString();
        
    

No se te olvide dar visibilidad a esta noticia si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *