2016-11-08 26 views
0

私はFileHelperナゲットパッケージを使用してフラットファイルをカスタムDTOリストクラスに解析しています。私の開発の初期に、FixedFieldLengthを、宣言されたメンバーのリストを持つクラスファイルでハードコーディングしました。私はそのクラスを使ってfilehelperengineを構築しましたが、後でフィールド長を動的に作成し、 classBuilder今FileHelperEngineはリストの代わりにリスト<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; 
} 

、私はオブジェクトが今

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

以下のようFileHelperEngineを作成する方法を上から返され、parseResultはそれがList<T>

0123にする必要があり List<object>になります使用します

fileHelperEngine戻っList<T>我々はこのためのclassBuilder.CreateRecordClass()

に合格しない、私はループに各レコードを持っていたし、それぞれのタイプに変換します。私は、オートマチックも、オブジェクトのプロパティが変換されないため変換できないと信じています。

このライブラリにこの何かを追加する必要がありますか、それとも何か不足していますか?

+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'の場合にのみ動作します。 –

関連する問題