c# - 用于二进制数据的类似 FileHelpers 的数据导入/导出实用程序?

标签 c# binary serialization microcontroller filehelpers

当我处理文本数据时,我会使用优秀的 FileHelpers 库。它允许我非常轻松地将文本字段从文件或内存中的字符串转储到表示数据的类中。

在使用基于大端微 Controller 的系统时,我需要读取串行数据流。为了在非常有限的微 Controller 平台上节省空间,我需要编写包含各种多字节类型字段的原始二进制数据(本质上只是将结构变量转储到串口之外)。

我喜欢 FileHelpers 的架构。我创建了一个代表数据的类,并用告诉引擎如何将数据放入类中的属性对其进行标记。我可以为引擎提供一个表示单个记录的字符串,并获得数据的反序列化表示。然而,这与对象序列化的不同之处在于原始数据不以任何方式分隔,它是一种简单的二进制固定记录格式。

FileHelpers 可能不适合读取这样的二进制数据 它无法处理显示的空值和* 我怀疑可能存在 unicode 问题(引擎将输入作为字符串,所以我必须从串行端口读取字节并将它们转换为 unicode 字符串,然后再转到我的数据转换器类)。作为一项实验,我已将其设置为读取二进制流和只要我小心不发送空值,它目前运行良好。很容易设置新的转换器来读取原始数据并解决字节序格式化问题等。目前它在空值上失败并且不能处理多个记录(它期望记录之间有 CRLF)。

我想知道的是,是否有人知道与 FileHelpers 类似但旨在处理二进制数据的开源库。

我正在考虑从 FileHelpers 派生一些东西来处理这个任务,但看起来应该已经有一些东西可以用来做这个了。

*事实证明,它不会提示输入流中的空值。我的测试程序中出现了一个不相关的错误,该错误出现在我预计会出现空值问题的地方。应该先深入调查一下!

最佳答案

我没有用过filehelpers,所以无法直接比较;然而,如果你有一个代表你的对象的对象模型,你可以尝试 protobuf-net ;它是 .NET 的二进制序列化引擎,使用 Google 的紧凑型“ Protocol Buffer ”有线格式。比 xml 之类的东西效率高得多,但无需编写所有自己的序列化代码。

请注意,“ Protocol Buffer ”确实在字段之间包含一些非常简洁的标记(通常为一个字节);这增加了一个填充,但大大提高了版本容错性。对于“打包”数据(即来自数组的整数 block ),如果需要可以省略。

所以:如果你只是想要一个紧凑的输出,它可能会很好。如果您需要特定输出,可能就没那么需要了。

披露:我是作者,所以我有偏见;但它是免费的。

关于c# - 用于二进制数据的类似 FileHelpers 的数据导入/导出实用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185981/

相关文章:

c# - 如何使用代码优先 Entity Framework 指定外键

c# - 如何在引用外部库的代码中提供注释

c# - 公共(public)静态变量 c# 使用正确吗?

c - 在没有 fopen 的情况下在 C 中读取二进制文件

file - 在 Swift 中,如何将现有二进制文件读入数组?

c# - 如何在 .NET C# 中转换反序列化 php 对象

java - JAXB - 如果类是同一类的字段,我们是否应该使用 @XmlSeeAlso 绑定(bind)类

c# - finally block 中的多个操作

c# - 序列化对象而不包括属性名称

c++ - 使用 hexdump 输出 64 位整数