XML中的协议规范

时间:2010-06-11 17:04:34

标签: c# design-patterns protocols

有没有办法在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有一种称为“二进制序列化器”的东西,但我认为这不是我想要的。

有没有办法分离协议和代码,即使数据包'包含'其他数据包并且有条件元素?

1 个答案:

答案 0 :(得分:0)

也许部分答案会帮助您了解我想要的地方。

如果还没有“协议库”,我可以自己实现。我可能不得不使用(类似的)这四个步骤:

  1. 设计XML以存储可以构建数据包的规则。
  2. 使用'Abstract Factory Pattern'创建具有共同主题的对象。
  3. 将一个字节数组解析为在运行时创建的中间类。
  4. 使用反射将这些中间类映射到在设计时定义的类。
  5. 不是一个明确的答案。显然,我不想重新发明轮子;如果有一个现成的解决方案,我会接受它。