【问题标题】:In protobuf-net can i have a byte field?在 protobuf-net 中我可以有一个字节字段吗?
【发布时间】:2011-07-24 15:30:36
【问题描述】:

在 protobuf-net 中我可以有一个字节字段吗?字节数组字段是协议缓冲区规范的一部分吗?

基本上我想通过电线传输各种对象。在这种情况下,byte[] Payload 将是另一个协议缓冲区序列化对象。我这样做是因为我不需要指定类型

谢谢

public sealed class CellUpdateTransmission
{
    public int RowIndex { get; private set; }
    public int CellIndex { get; private set; }          
    public byte[] Payload {get;private set;}

【问题讨论】:

    标签: c# protocol-buffers protobuf-net


    【解决方案1】:

    是的,你可以。在您的第二阶段,将字节移动到内存流中,然后按正常方式反序列化。

                byte[] Payload= datafromsomewhere;
                var ms = new MemoryStream(Payload);
                var req = Serializer.Deserialize<AbcClass>(ms);
    

    【讨论】:

      【解决方案2】:

      是的,bytebyte[] 都受支持;后者映射到 .proto 规范中的bytes。这实际上与无论如何通常表示子消息的方式相同。只需让序列化程序知道该成员(最简单的方法:添加一个属性,例如[ProtoMember(3)])。

      【讨论】:

      • 字节字段是否映射到 .proto 规范中的任何内容?还是我需要找到一种不同的方法来反序列化用字节字段编写的二进制数据?谢谢!
      • @Toolbox 一个字节?还是很多字节? varint(用于 int/uint)对于 0-127 占用 1 个字节,对于 128-255 占用 2 个字节; bytes 干净地映射到多个字节。
      猜你喜欢
      • 2012-11-20
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多