C# Protobuf net“;引用跟踪对象在反序列化过程中更改了引用“;错误

C# Protobuf net“;引用跟踪对象在反序列化过程中更改了引用“;错误,c#,serialization,deserialization,protocol-buffers,protobuf-net,C#,Serialization,Deserialization,Protocol Buffers,Protobuf Net,当我反序列化以下对象时,出现“反序列化期间引用跟踪对象更改了引用”错误: [ProtoContract] public class ZmqMessage { [ProtoMember(1)] public ZmqMessageType MessageType { get; set; } [ProtoMember(2, DynamicType = true)] public object MessageBody { get; set; } public Z

当我反序列化以下对象时,出现“反序列化期间引用跟踪对象更改了引用”错误:

[ProtoContract]
public class ZmqMessage
{
    [ProtoMember(1)]
    public ZmqMessageType MessageType { get; set; }
    [ProtoMember(2, DynamicType = true)]
    public object MessageBody { get; set; }

    public ZmqMessage()
    { }

    public ZmqMessage(ZmqMessageType zmqMessageType, object messageBody)
    {
        this.MessageType = zmqMessageType;
        this.MessageBody = messageBody;
    }
}
我通过以下方式序列化和反序列化:

public static class ProtoBuf
{
    public static byte[] Serialize<T>(T serializeThis)
    {
        using (var stream = new MemoryStream())
        {
            Serializer.Serialize<T>(stream, serializeThis);
            return stream.GetBuffer();
        }
    }

    public static T Deserialize<T>(byte[] byteArray)
    {
        using (var stream = new MemoryStream(byteArray))
        {
            return Serializer.Deserialize<T>(stream);
        }
    }
}
公共静态类协议
{
公共静态字节[]序列化(T序列化此)
{
使用(var stream=new MemoryStream())
{
Serializer.Serialize(流,serializeThis);
返回stream.GetBuffer();
}
}
公共静态T反序列化(字节[]byteArray)
{
使用(var流=新内存流(byteArray))
{
返回序列化程序。反序列化(流);
}
}
}
我做错什么了吗? 谢谢

EDIT1:我发现在ZmqMessage对象的MessageBody中发送“Test”之类的字符串时没有收到错误。然而,当我发送一个int,如(int)1或仅仅是1时,它抛出上述错误

EDIT2:以下是枚举和一个快速测试用例,演示了问题:

public enum ZmqMessageType
{
    RawByteArray = 5550,
    ControlMessage = 5551
}

ZmqMessage testMessage = new ZmqMessage(ZmqMessageType.ControlMessage, "Test");
        byte[] byteMessage = ProtoBuf.Serialize<ZmqMessage>(testMessage);
        ZmqMessage deserializedMessage = ProtoBuf.Deserialize<ZmqMessage>(byteMessage);

ZmqMessage testMessage = new ZmqMessage(ZmqMessageType.ControlMessage, (int) 1);
        byte[] byteMessage = ProtoBuf.Serialize<ZmqMessage>(testMessage);
        ZmqMessage deserializedMessage = ProtoBuf.Deserialize<ZmqMessage>(byteMessage);
公共枚举ZmqMessageType
{
RawByteArray=5550,
控制信息=5551
}
ZmqMessage testMessage=新的ZmqMessage(ZmqMessageType.ControlMessage,“测试”);
byte[]byteMessage=ProtoBuf.Serialize(testMessage);
ZmqMessage deserializedMessage=ProtoBuf.Deserialize(byteMessage);
ZmqMessage testMessage=新的ZmqMessage(ZmqMessageType.ControlMessage,(int)1);
byte[]byteMessage=ProtoBuf.Serialize(testMessage);
ZmqMessage deserializedMessage=ProtoBuf.Deserialize(byteMessage);

我真的那样拼写错了吗?古怪的您能否确认您使用的是什么版本,以及您使用的是什么值?i、 e.
MessageBody
是什么?是否为
ZmqMessageType
和枚举?如果没有,是什么?基本上,你们有一个可以直接使用的复制程序吗?MessageBody应该保存任何东西,但在我当前的测试用例中,我分配了一个“string testMsg=“test””。ZmqMessageType是一个枚举,正确。我没有repo,因为它作为更大项目的一部分运行,但我可以通过序列化和反序列化测试消息来创建一个快速测试用例。字符串处理得很好,但当我分配给MessageBody一个int时,它就通过这个错误消息运行了。@Marc,我基本上已经发布了运行所需的所有类,但我只会在我的问题中添加枚举和一个简短的测试用例。@Marc,我会给你回复版本,但我认为它是v2。哦,它肯定是v2。我的意思是更多的.410(或其他)