Соблюдайте следующий тривиальный код:
[ProtoContract]
public class B
{
[ProtoMember(1)] public int Y;
}
[ProtoContract]
public class C
{
[ProtoMember(1)] public int Y;
}
class Program
{
static void Main()
{
var b = new B { Y = 2 };
var c = new C { Y = 4 };
using (var ms = new MemoryStream())
{
Serializer.Serialize(ms, b);
Serializer.Serialize(ms, c);
ms.Position = 0;
var b2 = Serializer.Deserialize<B>(ms);
Debug.Assert(b.Y == b2.Y);
var c2 = Serializer.Deserialize<C>(ms);
Debug.Assert(c.Y == c2.Y);
}
}
}
Первое утверждение не выполняется!
Каждый оператор Serialize увеличивает позицию потока на 2, поэтому в конце значение ms.Position равно 4. Однако после первого оператора Deserialize позиция устанавливается на 4, а не на 2! Фактически, b2.Y равно 4, что должно быть значением c2.Y!
Есть что-то абсолютно простое, что я здесь упускаю. Я использую protobuf-net v2 r383.
Спасибо.
EDIT
Это должно быть что-то действительно глупое, потому что это не работает и в v1.