【发布时间】:2015-09-28 17:38:18
【问题描述】:
我正在尝试使用 VB.NET 中的电机控制命令创建一个枚举。我想在一台计算机上设置命令,对其进行序列化,通过 TCP 连接将其发送到另一台计算机,反序列化并解释命令。我知道如何使用 TCP 连接,但我缺少关于枚举的概念性知识。我正在使用 Protobuf-net 进行序列化并具有以下命令描述。
Public Class RemoteControl
<ProtoContract>
Public Class Command
<ProtoContract>
Enum CommandAction
<ProtoMember(2)>
HOME_MOTOR
<ProtoMember(1)>
MOVE_ABS
End Enum
End Class
End Class
我的问题是,如何将 RemoteControl 对象的实例设置为我想要的操作?我知道枚举使用整数,所以要发送 MOVE_ABS(标签为 1),我尝试了
Dim myAction As New RemoteControl
myAction.Command.CommandAction = 1
这返回了一个错误,提示“CommandAction 是一种类型,不能用作表达式”。
另外,一旦我设法弄清楚如何发送此命令,我将如何在另一台计算机上解释它?如果发送的命令是MOVE_ABS,那么类似RemoteControl.Command.CommandAction 的反序列化值是否等于1?
【问题讨论】:
-
我过去必须做的是使映射到
enum的属性成为integer,并在反序列化数据后直接将属性转换为enum值通过电线发送。这要求枚举要么在双方都可以看到的 DLL 中,要么在通信双方单独声明。可能不是最好的解决方案,但它确实有效。 -
感谢您的建议。我的枚举将在双方声明,所以我会考虑到这一点。
标签: vb.net serialization enums protocol-buffers protobuf-net