从模板生成平面文件并将其解析回来的最佳方法是什么?

时间:2011-08-12 13:34:30

标签: .net template-engine flat-file

这是我遇到的问题,我需要生成一个扁平的字符串文件,其中包含一个相当复杂(强加)的结构,基于字段长度和开始和停止位置。它将从.Net应用程序(存储在SQL Server中的数据)生成。它有不同的标题和不同的模板。结构也可能会改变加班时间。同样类型的文件也必须解析回我的系统。

我最喜欢的是创建一个定义文件外观的模板,例如使用以下属性: 名称,类型,字段长度,开始和&结束位置,默认值。

能够从某种视图数据生成文件,然后从同一模板中解析回来。

我很确定我不是第一个遇到这种麻烦的人,但我在互联网上找不到一个好的图书馆。我看过StringTemplate,但它似乎无法根据数据的长度和位置创建模板。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可能有充分的理由不对XML或JSON使用标准序列化。看看T4 Templating EngineStringTemplate是否有任何帮助。

编辑:也许你应该重新评估你的方法,而不是寻找'模板',因为它似乎仅适用于代,并且不支持固定长度。说自定义格式需要序列化和反序列化是否公平?如果格式是专有的,那么你几乎必须编写自定义序列化代码,其中包括所有规则,如固定长度等。

答案 1 :(得分:1)

您的问题在企业应用程序领域非常普遍。您可以尝试开发自己的库,也可以选择构成整个作业的sw。这种应用程序有很多例子,通常企业服务总线(ESB)对于数据传输很有用:ESB为所有类型的数据源提供了许多数据句柄,也提供了固定长度的文件。

以下是您可以在解决方案中包含的开放源码链接:

答案 2 :(得分:1)

我不知道处理此问题的通用组件。但是我会写一个基于模板定义的通用工具,它使用反射来填充对象中的属性。

您的“模板”需要定义文件的结构,如您已经描述的那样,以及要将数据加载到的类的全名(如果可以更改,则可能包含类的程序集)。

基本流程是:

  • 检查标题的正确性(可选)
  • 循环数据线
    • 创建目标类的新实例(使用Assembly.GetType() and Type.GetConstructor()`)
    • 循环穿过田野
      • 根据类型分析值
      • 使用相同的名称设置属性的值(使用Type.GetProperty()PropertyInfo.SetValue()
    • 将对象添加到结果集合中。
  • 完成

只需确保您的视图对象具有默认构造函数和所有必需属性,您应该没问题。

使用反射来获取视图对象的值可以大致相同地编写文件。