Могу ли я иметь байтовое поле в protobuf-net?

Могу ли я иметь байтовое поле в protobuf-net? Является ли поле байтового массива частью спецификации буферов протокола?

В основном я хочу передавать по проводу различные объекты. В этом случае полезная нагрузка byte [] будет другим сериализованным объектом буфера протокола. Я делаю это, чтобы не вводить конкретный тип

Благодарность

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

person JamesRedcoat    schedule 24.07.2011    source источник


Ответы (2)


Да, ты можешь. На втором этапе переместите байты в поток памяти, а затем выполните десериализацию, как обычно.

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

Да, поддерживаются как byte, так и byte[]; последний отображается на bytes в спецификации .proto. В любом случае это фактически то же самое, как обычно представляется вложенное сообщение. Просто дайте сериализатору знать о члене (проще всего: добавив атрибут, например [ProtoMember(3)]).

person Marc Gravell    schedule 24.07.2011
comment
Соответствует ли поле байта чему-либо в спецификации .proto? Или мне нужно будет найти другой способ десериализации двоичных данных, записанных с помощью байтовых полей? Спасибо! - person Dawson; 25.08.2011
comment
@Toolbox один байт? или много байтов? varint (используется для int / uint) займет 1 байт для 0–127 и 2 байта для 128–255; bytes четко отображается на несколько байтов. - person Marc Gravell; 29.08.2011