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 的每个实例中输出内部“集合”?

所以行输出看起来像这样......

“字段 1 值”、“7”、“值 1|值 2|值 3”

4

1 回答 1

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,但我认为您应该能够导出包含 Field1、Field2 和 CollectionValues 的 CSV 文件。

更新:

查看 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; }
}
于 2013-08-29T15:43:38.477 回答