protobuf-net的原始proto表示(De)SerializeWithLengthPrefix

时间:2015-12-10 07:55:15

标签: c# protocol-buffers protobuf-net

首先,这不是this其他问题的重复,所以请在标记之前完整阅读我的问题。

我需要写出与使用Serializer.NonGeneric读取和写入的C#(de)序列化消息匹配的原始proto文件。(De)Serialize。我目前使用PrefixStyle.Base128并希望继续这样做(除非使用PrefixStyle.Fixed32是前进的唯一方法)。

例如,给出一条消息:

message KeyValuePair {
   optional string Key = 1;
   optional string Value = 2 [default = ""];
}

根据this Google网上论坛帖子,@ marc-gravell说" ... SerializeWithLengthPrefix方法,默认情况下,旨在以一种有效的protobuf流的方式表示数据 - 在特别是,好像它只是父对象或列表的成员...... "

" 父对象或列表"在使用

序列化时,在原始proto定义中看起来像
Serializer.NonGeneric.SerializeWithLengthPrefix(<stream>, new KeyValuePair { Name = "foo", Value = "Bar" }, PrefixStyle.Base128, <unique_message_id>)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

message DummyDoesNotExist {
    optional KeyValuePair Value = <unique_message_id>;
}

在电线上,这是:

varint: [wire-type: length-prefixed, field: <unique_message_id>] // typically 1 byte
varint: [length] // typically 1 or 2 bytes
[length bytes of KeyValuePair data]