我正在尝试解析从外部服务收到的 protobuf 消息。我知道此数据是有效的 protobuf 消息,并且我知道在将其发送到反序列化器之前我不会意外地破坏它。这是我的代码:
public static T DeserializeFromBytes<T>(byte[] encoded)
{
MemoryStream stream = new MemoryStream(encoded);
stream.SetLength(encoded.Length);
stream.Capacity = encoded.Length;
T decoded = (T)Serializer.Deserialize<T>(stream);
stream.Close();
return decoded;
}
我这样调用这个方法:
MercuryReply header = ProtobufUtils.DeserializeFromBytes<MercuryReply>(Convert.FromBase64String(metadata[0]));
metadata[0]
是一个包含 protobuf 消息的 base64 字符串。示例如下所示:
CjRobTovL21ldGFkYXRhL2FsYnVtL2M1MzU3MTA0M2U4ODQ3YjRhODc1YzVlNmZiNmNiZTdmEhp2bmQuc3BvdGlmeS9tZXRhZGF0YS1hbGJ1bSCQAzIYCgpNRC1WZXJzaW9uEgoxMzcwMzc5NTA1Mg8KBk1DLVRUTBIFNjk2MDQyGQoPTUMtQ2FjaGUtUG9saWN5EgZwdWJsaWMyDwoHTUMtRVRhZxIELD8q+Q==
现在,当我运行程序时,反序列化时出现 Invalid wire-type 错误。我看不出为什么会发生这种情况。这里有什么明显的东西我错过了吗?