FileHelperEngine返回List <object>而不是List <t>

时间:2016-11-08 14:32:35

标签: c# automapper filehelpers

我正在使用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 转换,因为对象的属性不可见转换。

这个库中是否需要添加某些东西,还是我缺少的东西?

1 个答案:

答案 0 :(得分:0)

尝试使用Cast<T>()(为T插入所需的类):

var parseResult = fileHelperEngine.ReadFileAsList(fileName).Cast<T>();
// if desired then add .ToList() or .ToArray()