Я пытаюсь создать класс с методом, в котором я могу загрузить файл (в данном случае CSV) и преобразовать его в любую предопределенную структуру данных в моей программе.
С помощью других статей я написал следующий код, но я застрял. (поэтому в размещенном коде есть ошибки).
Идея состоит в том, что я использую метод CsvSerialise, а вход - это byteArray, и преобразую его в список объектов, где на входе указан тип вывода, который я хочу.
Если у кого-то есть идеи, пожалуйста, дайте им.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Text.RegularExpressions;
namespace DocumentArchiveV2.Util
{
public class CsvSerialiser
{
public List<Output> CsvSerialise<Output, DestinationFormat>(byte[] csvData, Type destinationType)
{
try
{
List<List<string>> lislistCsvData = BinaryDataToList(csvData);
List<string> columnNames = lislistCsvData[0];
List< destinationType > = new List<DestinationFormat>();
// loop over de regels / records
for (int i = 1; i < lislistCsvData.Count - 1; i++)
{
var Instance = Activator.CreateInstance(destinationType);
var properties = Instance.GetType().GetProperties();
foreach (var property in properties)
{
int index = columnNames.FindIndex(x => x == property.Name);
if (index >= 0)
{
PropertyInfo propertyInfo = destinationType.GetProperty(lislistCsvData[i][index]);
Type propertyType = propertyInfo.GetType();
var geconverteerdeWaarde = VindPropertyNaam(propertyType, lislistCsvData[i][index]);
propertyInfo.SetValue(propertyInfo, geconverteerdeWaarde);
}
}
}
}
catch (Exception)
{
throw;
}
}
public object VindPropertyNaam(Type type, string popertyName)
{
try
{
var parse = type.GetMethod("Parse", new[] { typeof(string) });
if (parse == null) throw new NotSupportedException();
return parse.Invoke(null, new object[] { popertyName });
}
//or don't catch
catch (Exception)
{
return null;
}
}
private object LoadRecord(Type propertyType)
{
throw new NotImplementedException();
}
private List<List<string>> BinaryDataToList(byte[] csvData)
{
try
{
List<List<string>> serialised = new List<List<string>>();
foreach (var line in Regex.Split(Encoding.ASCII.GetString(csvData), "\r\n"))
{
string[] splittedLine = line.Split(';');
serialised.Add(line.Split(';').ToList());
}
return serialised;
}
catch (Exception ex)
{
DiagnoseLib.Logging.Logger.Error(ex.Message);
return null;
}
}
}
}