我得到 ProtoException
ProtoBuf.ProtoException : Internal error; a key mismatch occurred
使用以下代码:
[ProtoContract]
class Foo { }
class MemberRemovedTest
{
[ProtoContract]
class V1
{
[ProtoMember(1, AsReference = true)]
public Foo A { get; set; }
[ProtoMember(2, AsReference = true)]
public Foo B { get; set; }
}
[ProtoContract]
class V2
{
[ProtoMember(2, AsReference = true)]
public Foo B { get; set; }
}
public void BasicTest()
{
var v1 = new V1();
v1.A = new Foo();
v1.B = new Foo();
byte[] buffer;
V2 v2;
using (var stream = new MemoryStream())
{
Serializer.Serialize(stream, A);
buffer = stream.ToArray();
}
using (var stream = new MemoryStream(buffer))
{
v2 = Serializer.Deserialize<V2>(stream); //Exception here
}
}
}
如果出现以下情况,不会抛出异常:
ProtoMember
或A
的{{1}}属性不是B
。AsReference =
true
和A
都没有设置B
个实例。我理解protobuf支持成员删除,但这似乎表明存在必须保留它们的情况。
这是Protobuf中的错误还是关于删除成员的错误假设?
调用堆栈异常:
Foo
答案 0 :(得分:0)
我现在没有比“是,那不行”更好的评论。烦恼 - 有趣的场景。