有没有办法在XML中指定基于数据包的协议,所以(反)序列化可以自动发生?
背景如下。我有一个通过串口通信的设备。它发送和接收由“数据包”组成的字节流。数据包是基本数据类型和(有时)其他数据包的集合。数据包的某些元素是有条件的;它们的包含取决于早期的元素。
我有一个与此设备通信的C#应用程序。当然,我不希望在整个应用程序中使用字节级别;我想将协议与我的应用程序代码分开。因此,我需要将字节流转换为结构(类)。
目前,我已经通过为每个数据包定义一个类来实现C#中的协议。这些类定义每个数据包的元素的顺序和类型。使类成员成为条件很困难,因此协议信息最终会出现在函数中。
我想象的XML看起来像这样(请注意我设计XML的经验有限):
<packet>
<field name="Author" type="int32" />
<field name="Nickname" type="bytes" size="4">
<condition type="range">
<field>Author</field>
<min>3</min>
<max>6</min>
</condition>
</field>
</packet>
.NET有一种称为“二进制序列化器”的东西,但我认为这不是我想要的。
有没有办法分离协议和代码,即使数据包'包含'其他数据包并且有条件元素?
答案 0 :(得分:0)
也许部分答案会帮助您了解我想要的地方。
如果还没有“协议库”,我可以自己实现。我可能不得不使用(类似的)这四个步骤:
这不是一个明确的答案。显然,我不想重新发明轮子;如果有一个现成的解决方案,我会接受它。