这是我遇到的问题,我需要生成一个扁平的字符串文件,其中包含一个相当复杂(强加)的结构,基于字段长度和开始和停止位置。它将从.Net应用程序(存储在SQL Server中的数据)生成。它有不同的标题和不同的模板。结构也可能会改变加班时间。同样类型的文件也必须解析回我的系统。
我最喜欢的是创建一个定义文件外观的模板,例如使用以下属性: 名称,类型,字段长度,开始和&结束位置,默认值。
能够从某种视图数据生成文件,然后从同一模板中解析回来。
我很确定我不是第一个遇到这种麻烦的人,但我在互联网上找不到一个好的图书馆。我看过StringTemplate,但它似乎无法根据数据的长度和位置创建模板。
谢谢!
答案 0 :(得分:1)
您可能有充分的理由不对XML或JSON使用标准序列化。看看T4 Templating Engine或StringTemplate是否有任何帮助。
编辑:也许你应该重新评估你的方法,而不是寻找'模板',因为它似乎仅适用于代,并且不支持固定长度。说自定义格式需要序列化和反序列化是否公平?如果格式是专有的,那么你几乎必须编写自定义序列化代码,其中包括所有规则,如固定长度等。答案 1 :(得分:1)
您的问题在企业应用程序领域非常普遍。您可以尝试开发自己的库,也可以选择构成整个作业的sw。这种应用程序有很多例子,通常企业服务总线(ESB)对于数据传输很有用:ESB为所有类型的数据源提供了许多数据句柄,也提供了固定长度的文件。
以下是您可以在解决方案中包含的开放源码链接:
答案 2 :(得分:1)
我不知道处理此问题的通用组件。但是我会写一个基于模板定义的通用工具,它使用反射来填充对象中的属性。
您的“模板”需要定义文件的结构,如您已经描述的那样,以及要将数据加载到的类的全名(如果可以更改,则可能包含类的程序集)。
基本流程是:
Assembly.GetType() and
Type.GetConstructor()`)Type.GetProperty()
和PropertyInfo.SetValue()
)只需确保您的视图对象具有默认构造函数和所有必需属性,您应该没问题。
使用反射来获取视图对象的值可以大致相同地编写文件。