По по умолчанию protobuf (спецификация Google, а не proobuf-net специально) предназначен для того, чтобы вы могли обрабатывать последовательные сообщения как часть одного объекта - то есть вы можете добавлять поля в сообщение просто конкатенация, которая, по сути, то, что вы делаете здесь. Каждый объект верхнего уровня (по умолчанию) не имеет какого-либо вида отделения от следующего объекта.
Чтобы заставить его обращаться с ними как с различными объектами, посмотрите на методы *WithLengthPrefix
(или вы можете использовать версии IEnumerable<T>
- возможно, DeserializeItems
; обратите внимание также, что он будет автоматически применять префиксы длины, если вы дадите ему что-то). как список для сериализации); например:
По существу:
Serializer.SerializeWithLengthPrefix(stream, postA1, PrefixStyle.Base128, 1);
Serializer.SerializeWithLengthPrefix(stream, postB1, PrefixStyle.Base128, 1);
stream.Position = 0;
var postA2 = Serializer.DeserializeWithLengthPrefix<Post>(stream,
PrefixStyle.Base128, 1);
var postB2 = Serializer.DeserializeWithLengthPrefix<Post>(stream,
PrefixStyle.Base128, 1);