using System.Globalization;
using System.Collections.Generic;
public static IEnumerable<T> Test<T>(string content, Func<CsvReader, string[], T> func)
using (var reader = new StringReader(content))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
var headers = csv.HeaderRecord;
var records = new List<T>();
var record = func(csv, headers);
public static void Main()
string fileContent = "PermissionName,SomeRole,SomeRole2\r\nAdmin,True,False\r\nNoPermission,False,False";
var records = Test(fileContent, (reader, headers) =>
var roles = new List<Role>();
for (int i = 1; i < headers.Length; i++)
{RoleName = headers[i], IsGranted = reader.GetField<bool>(headers[i]), });
{PermissionName = reader.GetField<string>(headers[0]), Permissions = roles};
foreach (var record in records)
Console.WriteLine(record.PermissionName);
foreach (var item in record.Permissions)
Console.WriteLine(item.RoleName + " = " + item.IsGranted);
public string PermissionName
public List<Role> Permissions