我有一些使用Protobuf.net的相当简单的代码,它抛出了一个非常奇怪的异常。
在第167行的MetaType.cs中,它抛出invalidooperationexception“一旦生成序列化程序,就不能更改类型”。这是什么意思?我该怎么解决?
我的代码如下:
while (!Parallel.For(0, 100, (i) =>
{
Widget w;
lock (f) { w = f.CreateWidget(); }
SerialiseWidget(w);
}).IsCompleted)
{
Thread.Sleep(10);
}
很简单,它只是并行循环所有内容,并序列化100个小部件。
private byte[] SerialiseWidget(Widget w)
{
using (MemoryStream m = new MemoryStream())
{
Serializer.Serialize<PacketChunk>(m, w);
return m.ToArray();
}
}
最后,widget类如下所示:
[ProtoContract]
private class Widget
{
[ProtoMember(1)]
public int a;
[ProtoMember(2)]
public byte[] b;
[ProtoMember(3)]
public Thing c; //Thing is itself a protocontract
[ProtoMember(4)]
public int d;
[ProtoMember(5)]
public int e;
}