使用FileHelper读取和写入各种类型的文件

时间:2016-06-13 20:05:13

标签: c# winforms filehelpers

如何使用FileHelpers在以下类中读取/写入以下文件:

enter image description here

以下课程:

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。感谢您的帮助

1 个答案:

答案 0 :(得分:1)

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

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

不幸的是,您可能需要两种格式。没有进一步编码就很难将它们组合起来。

要清楚

  • MasterDetailEngine满足页眉/页脚情况,但它目前仅支持一种详细信息类型,只支持一个嵌套级别。
  • MultiRecordEngine允许多种记录类型。但是,它将每一行视为不相关的记录,并且层次结构(即哪个详细记录属于哪个主记录)很难确定。

我不确定FileHelpers是否是正确的工具,但如果您打算将其付诸实践,则可能值得研究以下内容:

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

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

  3. 出口 - 反其道而行之。将每个批次导出为主要详细信息BatchContents,然后将它们连接起来。

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