Skip to main content

How to convert Dictionary to a comma separated csv string in c#?

the following function will take the list of dictionary items to a comma separated csv string.

public string ConvertToCSV(List<Dictionary<string, string>> items)
{
    if (!items.Any()) return string.Empty;
    StringBuilder writer = new StringBuilder();
    // Generating Header.
    List<string> headers = items[0].Keys.Select(x => x).OrderBy(x => x).ToList();
    writer.AppendLine(string.Join(", ", headers.Select(h => h)));
    // Generating content.
    foreach (var item in items)
    writer.AppendLine(string.Join(", ", headers.Select(h => item[h])));
    return writer.ToString();
}
 

Comments

  1. This comment has been removed by the author.

    ReplyDelete
  2. Warning! If your data contains comma (,) or quote (") characters, this will not produce the output you want. You can escape a comma by putting the data in quotes, and you can escape a quote literal by doubling it.

    public static string CsvFromDictionaries(
      IEnumerable<IDictionary<string, string>> records)
    {
        var headers = records.FirstOrDefault()?.Keys ?? new string[] { };
        var headerRow = headers.ToDictionary(h => h, h => h);
        var rows = new[] { headerRow }.Concat(records).Select(record =>
        {
            var values = headers.Select(key =>
            {
                var value = record[key] ?? String.Empty;
                value = value.Replace("\"", "\"\"");
                if (value.Contains('"') || value.Contains(','))
                {
                    value = '"' + value + '"';
                }
                return value;
            });
            return String.Join(",", values);
        });
        return String.Join("\n", rows);
    }

    ReplyDelete

Post a Comment