Я использую пакет FileHelper nuget для разбора плоского файла в пользовательский класс списка DTO. В начале моего развития я жестко закодировал FixedFieldLength в файле класса, в котором был объявлен список участников, и я использовал этот класс для создания файлового сервера, но позже мы решили динамически создать длину поля и использовать ниже код для создания classBuilderFileHelperEngine возвращает список <object> вместо списка <T>
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 даже для преобразования, поскольку свойства объекта не видны для преобразования.
Это что-то нужно добавить в эту библиотеку, или это то, что мне не хватает?
'' Список является compiletime против 'Новый FixedLengthClassBuilder (имя класса)' является среда. Как он узнает, что '' он должен вернуться? Технически; «Список » может быть создан, но он будет возвращен как «IList» –
Итак, когда я использовал в своем старом коде, я передаю '' в свой метод и создаю как этот var' fhEngine = new FileHelperEngine () ', поэтому он возвращает' List ', тогда как при передаче' classBuilder' он не принимает общий тип? –
superachu
Где вы передаете 'const string className =" My_Dynamic_Class ";' как '' параметр? вот почему ... В вашем примере 'fhEngine = new FileHelperEngine ()' вы делаете .. но не в приведенном выше примере. –