我正在使用FileHelper nuget包将平面文件解析为自定义DTO列表类。在我开发的开始,我在一个类文件中对FixedFieldLength进行了硬编码,该类文件具有声明的成员列表,并且我使用该类来构建filehelperengine,但后来我们决定动态创建字段长度并在代码下面使用以创建classBuilder
private FixedLengthClassBuilder BuildFixedLengthClass(string mplFileType)
{
var layoutDetails = GetLayoutDetailsFromDatabase();
const string className = "My_Dynamic_Class";
var fixedLengthClassBuilder = new FixedLengthClassBuilder(className);
foreach (var column in layoutDetails)
{
dynamic dynamicColumn = column;
fixedLengthClassBuilder.AddField(dynamicColumn.FieldName,
dynamicColumn.NumberOfCharacters, dynamicColumn.Data_Type);
if (dynamicColumn.Data_Type == "DateTime")
{
fixedLengthClassBuilder.LastField.Converter.Kind =
FileHelpers.ConverterKind.Date;
fixedLengthClassBuilder.LastField.Converter.Arg1 = "yyyyMMdd";
}
}
return fixedLengthClassBuilder;
}
现在,我使用从上面方法返回的对象来创建FileHelperEngine,如下所示
var fileHelperEngine = new FileHelperEngine(classBuilder.CreateRecordClass())
var parseResult = fileHelperEngine.ReadFileAsList(fileName);
现在,parseResult
将为List<object>
,必须为List<T>
当我们未通过 fileHelperEngine
时,List<T>
会返回classBuilder.CreateRecordClass()
因此,我必须循环每个记录并转换为相应的类型。我相信,我甚至不能使用 Automapper 转换,因为对象的属性不可见转换。
这个库中是否需要添加某些东西,还是我缺少的东西?
答案 0 :(得分:0)
尝试使用Cast<T>()
(为T插入所需的类):
var parseResult = fileHelperEngine.ReadFileAsList(fileName).Cast<T>();
// if desired then add .ToList() or .ToArray()