使用 FileHelpers 读写各种类型的文件

Reading and writing file with various types with FileHelpers

如何使用 FileHelpers 类 读取/写入下面的文件:

以下类:

public class SegmentP
{
    public string RegistryType { get; set; }
    public string Country { get; set; }
}
public class Detail
{
    public int RegistryType { get; set; }
    public int CodeCustomer { get; set; }
    public double NominalValue { get; set; }
    public SegmentP SegmentP { get; set; }
}
public class BatchFooter
{
    public int RegistryType { get; set; }
    public int Counter { get; set; }
}
public class BatchHeader
{
    public int RegistryType { get; set; }
    public int CodeService { get; set; }
}
public class Batch
{
    public BatchHeader BatchHeader { get; set; }
    public List<Detail> Details { get; set; }
    public BatchFooter BatchFooter { get; set; }
}
public class FileFooter
{
    public int RegistryType { get; set; }
    public int Counter { get; set; }
    public int Total { get; set; }
}
public class FileHeader
{
    public int RegistryType { get; set; }
    public int CompanyCode { get; set; }
    public DateTime GenerationDate { get; set; }
}
public class FileExample
{
    public FileHeader FileHeader { get; set; }
    public List<Batch> Batches { get; set; } 
    public FileFooter FileFooter { get; set; }
}

我想将整个文件加载到 FileExample 实体中,可以吗?

var fileExample = new FileExample
{
    FileHeader = new FileHeader
    {
        RegistryType = 1,
        CompanyCode = 1,
        GenerationDate = new DateTime(2016, 6, 1)
    },
    Batches = new List<Batch>
    {
        new Batch
        {
            BatchHeader = new BatchHeader
            {
                RegistryType = 2,
                CodeService = 1
            },
            Details = new List<Detail>
            {
                new Detail
                {
                    RegistryType = 3,
                    CodeCustomer = 1,
                    NominalValue = 10,
                    SegmentP = new SegmentP
                    {
                        RegistryType = "P",
                        Country = "Brazil"
                    }
                }
            },
            BatchFooter = new BatchFooter
            {
                RegistryType = 4,
                Counter = 1
            }
        }
    },
    FileFooter = new FileFooter
    {
        RegistryType = 5,
        Counter = 1,
        Total = 1
    }
};

我是 FileHelpers 的新手,需要指导,因为在示例中我注意到有选项 Master/Detail,但在我的示例中文件有更多类型 Master/Detail。感谢您的帮助

开箱即用,对于具有复杂层次结构的格式使用 FileHelpers 很困难。

FileHelpers 提供了两种处理多种记录类型的方法:the master/detail engine and the multi-record engine.

很遗憾,您的格式可能需要两者。如果不进一步编码,很难将它们组合起来。

说清楚

  • MasterDetailEngine迎合了header/footer的情况,但目前只支持一种细节类型和一层嵌套。
  • MultiRecordEngine 允许多种记录类型。但是,它将每一行都视为不相关的记录,并且很难确定层次结构(即,哪个详细记录属于哪个主记录)。

我不确定 FileHelpers 是否适合这里的工具,但如果您打算让它工作,可能值得研究以下内容:

  1. 解析文件一次以拆分批次。您甚至可以使用 FileHelpers 来执行此操作。然后你会得到一堆 Batch[] 的记录,字符串 属性 BatchContents.

  2. 然后枚举Batch[],用the master/detail engine处理BatchContents

  3. 对于导出 - 做相反的事情。将每个批次导出为主详细信息BatchContents,然后将它们连接起来。

当然,如果您的页眉和页脚包含计数、控制总数、校验和,等,那么还有更多工作要做