使用 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 是否适合这里的工具,但如果您打算让它工作,可能值得研究以下内容:
解析文件一次以拆分批次。您甚至可以使用 FileHelpers 来执行此操作。然后你会得到一堆 Batch[]
的记录,字符串 属性 BatchContents
.
然后枚举Batch[]
,用the master/detail engine处理BatchContents
。
对于导出 - 做相反的事情。将每个批次导出为主详细信息BatchContents
,然后将它们连接起来。
当然,如果您的页眉和页脚包含计数、控制总数、校验和,等,那么还有更多工作要做
如何使用 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 是否适合这里的工具,但如果您打算让它工作,可能值得研究以下内容:
解析文件一次以拆分批次。您甚至可以使用 FileHelpers 来执行此操作。然后你会得到一堆
Batch[]
的记录,字符串 属性BatchContents
.然后枚举
Batch[]
,用the master/detail engine处理BatchContents
。对于导出 - 做相反的事情。将每个批次导出为主详细信息
BatchContents
,然后将它们连接起来。
当然,如果您的页眉和页脚包含计数、控制总数、校验和,等,那么还有更多工作要做