Csvhelper: 编写包含集合的集合

创建于 2015-05-15  ·  4评论  ·  资料来源: JoshClose/CsvHelper

嗨,是否可以编写一个包含集合的集合,例如父记录和子记录?

--> Parent1, Name, Age
-->--> Child1, Field1, Field2
-->--> Child2, Field1, Field2
--> Parent2, Name, Age
-->--> Child3, Field1, Field2
...

我认为 AutoMapper 可能会通过它的递归来做到这一点,但是当我使用WriteRecords(items)尝试它时,只有父记录被写入。

谢谢

所有4条评论

据我所知,您不能拥有嵌套集合。 但是,您可以拥有嵌套对象。 请参阅 AutoMapping 部分下方的参考地图 @ http://joshclose.github.io/CsvHelper/

3.0 版支持可枚举属性。

您能否提供为每个嵌套对象添加行的示例? (我可以使用 3.0 版,但如何使用?)

void Main()
{
    using (var stream = new MemoryStream())
    using (var writer = new StreamWriter(stream))
    using (var reader = new StreamReader(stream))
    using (var csv = new CsvReader(reader))
    {
        writer.WriteLine("Id,Name,A,B,C");
        writer.WriteLine("1,one,a,b,c");
        writer.WriteLine("2,two,d,e,c");
        writer.Flush();
        stream.Position = 0;

        csv.Configuration.RegisterClassMap<TestMap>();
        csv.GetRecords<Test>().ToList().Dump();
    }
}

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<string> ExtraStrings { get; set; }
}

public sealed class TestMap : CsvClassMap<Test>
{
    public TestMap()
    {
        Map( m => m.Id );
        Map( m => m.Name );
        Map( m => m.ExtraStrings ).Index( 2 );
    }
}

如果您愿意,还可以查看单元测试。 https://github.com/JoshClose/CsvHelper/tree/master/src/CsvHelper.Tests/TypeConversion

此页面是否有帮助?
0 / 5 - 0 等级