用于二进制消息序列化/反序列化的结构

时间:2013-04-06 08:54:37

标签: c# binary

我是C#中的二元新手,对最佳方法有疑问。我有一个我正在尝试通信的应用程序,它具有特定的二进制消息格式。它必须以B8十六进制代码开头,并以BB十六进制代码结尾,其间包含二进制消息。能够获取字节缓冲区并将其转换为消息以便于访问消息属性的最佳方法是什么?我想象一个结构,但说实话,我真的不知道。

编辑:

我不希望它在二进制文件中的原因是我可以轻松使用我的应用程序中的数据。例如,我想将表示命令类型的二进制位转换为枚举。像这样(只是我想做的事情的代表):

struct CommandMessage
{
    public CommandType Command { get; set; }
    public object Data { get; set; }
}

enum CommandType
{
    UserJoined,
    MessageReceived
}

1 个答案:

答案 0 :(得分:1)

我建议将protobuf-net用于DTO序列化。

所以,定义一些实体,例如样本中的PackageCommandMessage

public Command Command;

public byte[] Data;(序列化为protobuf

根据Command,您可以使用DataDTO反序列化为具体protobuf类型。

如果您的消息应以特殊前缀开头,您也可以在Package处理此消息。 此外,Package应该处理自己向/从二进制流或缓冲区写入/读取(这是相当紧张的前进)。

例如package.WriteTo(buffer)生成[BB,Command,Data,B8]package.ReadFrom()

也是如此