2016-11-08 5 views
0

FileHelper 너겟 패키지를 사용하여 플랫 파일을 사용자 정의 DTO 목록 클래스로 구문 분석합니다. 개발 초기에는 FixedFieldLength를 클래스 파일에 선언했습니다.이 파일은 선언 된 멤버 목록을 가지고 있으며이 클래스를 사용하여 filehelperengine을 만들었지 만 나중에 필드 길이를 동적으로 만들고 코드를 사용하여 지금FileHelperEngine은 List 대신 List <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; 
} 

classBuilder, I 개체 지금

var fileHelperEngine = new FileHelperEngine(classBuilder.CreateRecordClass()) 
var parseResult = fileHelperEngine.ReadFileAsList(fileName); 

아래로 FileHelperEngine을 만드는 방법 상기에서 리턴 사용이이어야 경우, parseResultList<object> 될 것이다 List<T>

fileHelperEngine 반환 List<T> 우리는이 때문에classBuilder.CreateRecordClass()

를 통과하지 못한 , 나는 루프를 각각 기록했고, 각각의 유형을 변환합니다. 나는 Automapper도 변환 할 수 없다고 믿는다. 왜냐하면 객체의 속성이 변환되지 않아서 변환하기 때문이다.

이 라이브러리에이 라이브러리를 추가해야합니까, 아니면 제가 누락 된 라이브러리인가요?

+0

'리스트'새로운 FixedLengthClassBuilder (클래스 명)는'런타임이다. ''이 반환해야 할 내용을 어떻게 알 수 있습니까? 기술적으로; 'List '이 생성 될 수는 있지만,'IList'로 반환 될 것입니다. –

+0

예전 코드에서 사용했을 때, 제 메서드에서''을 전달하고 var'fhEngine = new FileHelperEngine () '때문에,'List '를 돌려주었습니다 만,'classBuilder'를 건네 줄 때는 제네릭 타입을 받아들이지 않습니다? – superachu

+0

'const string className = "My_Dynamic_Class";를''매개 변수로 전달하고 있습니까? thats why ... 당신의 예제에서'fhEngine = new FileHelperEngine ()'은 위와 같은 예제를 제공합니다. –

답변

0

것은 (T위한 삽입 원하는 클래스) Cast<T>()를 사용해보십시오 : `이 대 컴파일 타임입니다

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

첫 번째 추측은 같았지만 ''은 알 수 없습니다 .... –

+0

T가 OP에 알려 져야합니다. –

+0

'const string className = "My_Dynamic_Class";는 특정 기본 클래스가 알려진 경우에만 작동합니다.이 경우 Object' –