【发布时间】:2014-08-11 17:38:27
【问题描述】:
我有一个带有多个命令的串行通信协议,所有这些命令都在一个文本文件中指定。我有一个提供基本通信方法的库,但我想添加解析,而不必对所有指定数据包格式的结构进行硬编码。根据我的发现,这可能使用 XML 或 JSON,但我不知道从哪里开始。
我的文本文件中指定的命令格式示例如下:
[255]
Name = Get Relay State
Param1 = Relay Number, uint8_t
Result1 = Relay State, uint8_t
因此,该命令获取中继 1 的请求的字节数组将是 FF 01,其响应将类似于 FF 00(表示中继已打开)。
这是一个高度简化的示例,因为有数百个这样的命令,每个都有大量的输入和输出。
有没有什么方法可以提取值、字段名称和命令名称,而无需为每个命令中的每个输入和输出显式声明 struct?到目前为止,我已经完成了几个,但即使使用代码生成工具,协议的更改也不灵活。
【问题讨论】:
-
这可能会帮助您了解您的问题。见:Similar Question
-
如果你真的想要一个围绕协议定义构建的强类型程序集,你会想看看 Reflection.Emit() 你需要解析你的文件(XML 或其他)并编写代码根据这些值生成 C# 库。应该不会太难。
-
@Mangist 这正是我想要避免做的事情。您知道除了 Reflection.Emit 或 CodeDOM 是否还有其他选择?我不禁认为那里有一个更简单的解决方案。
-
@L.B 非常聪明地解决了这个问题!我没有意识到反射是可能的。我也许可以做类似的事情来解决这个问题,但我会先从
Reflection.Emit尝试TypeBuilder...