2013-08-29 74 views
0
[DelimitedRecord(",")] 
public class SampleType 
{ 
    public string Field1; 
    public int Field2; 

    public IEnumerable<ChildClass> Collection { get; set; } 
} 

[DelimitedRecord("|")] 
public class ChildClass 
{ 
    public string Value { get; set; } 
} 

我想使用FileHelpers將SampleTypes列表轉換爲CSV格式。如何在SampleType的每個實例中輸出內部'Collection'?使用FileHelpers導出嵌套集合

所以連續輸出會是這個樣子......

「Field1Value」, 「7」, 「值1 |值2 |值3」

+1

你需要決定,並說明要如何子類中表示CSV文件。你想讓你的CSV文件像'Field1,Field2,Child1,Child2,...'嗎? – ataravati

+0

請參閱更新。 –

回答

2

定義一個新的只讀屬性在你的類是這樣的:

[DelimitedRecord(",")] 
public class SampleType 
{ 
    public string Field1; 
    public int Field2; 

    public IEnumerable<ChildClass> Collection { get; set; } 
    public string CollectionValues 
    { 
     get 
     { 
      string.Join("|", this.Collection.Select(c => c.Value)); 
     } 
    } 
} 

我從來沒有使用FileHelper,但我認爲你應該能夠導出包含字段1,字段2,和CollectionValues一個CSV文件。

UPDATE:

望着FileHelpers'文檔,好像FileHelpers'造成這種情況的解決方案是使用自定義FieldConverter。你可以自定義一個轉換器是這樣的:

public class MyCustomConverter : ConverterBase 
{ 
    public override object StringToField(string from) 
    { 
     return from.Split('|').Select(s => new ChildClass { Value = s }); 
    } 


    public override string FieldToString(object fieldValue) 
    { 
     IEnumerable<ChildClass> collection = (IEnumerable<ChildClass>)fieldValue; 

     return string.Join("|", collection.Select(c => c.Value)); 
    }   
} 

然後,你可以用它在你的類是這樣的:

[DelimitedRecord(",")] 
public class SampleType 
{ 
    public string Field1; 
    public int Field2; 

    [FieldConverter(typeof(MyCustomConverter))] 
    public IEnumerable<ChildClass> Collection { get; set; } 
} 
+0

我希望FileHelpers更加天生地處理這個問題。 –

+0

查看最新的答案。 – ataravati

+0

我嘗試過,但自定義轉換器不適用於集合。目前我只是想做一些你最初的建議。 –