如何使用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。感谢您的帮助
答案 0 :(得分:1)
开箱即用,将FileHelpers用于具有复杂层次结构的格式很困难。
FileHelpers提供了两种处理多种记录类型的方法:the master/detail engine和multi-record engine。
不幸的是,您可能需要两种格式。没有进一步编码就很难将它们组合起来。
要清楚
MasterDetailEngine
满足页眉/页脚情况,但它目前仅支持一种详细信息类型,只支持一个嵌套级别。MultiRecordEngine
允许多种记录类型。但是,它将每一行视为不相关的记录,并且层次结构(即哪个详细记录属于哪个主记录)很难确定。我不确定FileHelpers是否是正确的工具,但如果您打算将其付诸实践,则可能值得研究以下内容:
解析文件一次以拆分批次。您甚至可以使用FileHelpers来执行此操作。然后你会得到一堆Batch[]
的字符串属性BatchContents
。
然后枚举Batch[]
并使用the master/detail engine处理BatchContents
。
出口 - 反其道而行之。将每个批次导出为主要详细信息BatchContents
,然后将它们连接起来。
当然,如果您的页眉和页脚包含计数,控制总数,校验和,等,那么还有更多工作。