2013-08-29 5 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; } 
} 

Я хотел бы преобразовать список SampleTypes в формат CSV с помощью FileHelpers. Как получить его для вывода внутренней «коллекции» в каждом экземпляре SampleType?Экспорт вложенной коллекции с FileHelpers

Так выход строки будет выглядеть примерно так ...

"Field1Value", "7", "Значение1 | значение2 | Value3"

+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, но я предполагаю, что вы должны быть в состоянии экспортировать файл CSV, содержащий Field1, Field2 и CollectionValues.

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

Я пробовал, но пользовательские преобразователи не работают с коллекциями. На данный момент я собираюсь сделать что-то вроде того, что вы изначально предложили. –

Смежные вопросы