代码之家  ›  专栏  ›  技术社区  ›  Ian Warburton

使用FileHelpers导出嵌套集合

  •  1
  • Ian Warburton  · 技术社区  · 12 年前
    [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”?

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

    “字段1Value”、“7”、“Value1|Value2|Value3”

    1 回复  |  直到 12 年前
        1
  •  2
  •   ataravati    12 年前

    在类中定义一个新的只读属性,如下所示:

    [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针对这种情况的解决方案是使用自定义字段转换器。您可以这样定义自定义转换器:

    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; }
    }