Is anyone aware of any issues when using ProtoBuf-Net to serialize/deserialize between compact framework and the full .Net framework? I have a class called LogData that I am se
Easy one: you use:
var buffer = ms.GetBuffer();
And then buffer.Length
. That means you are using the oversized, padded buffer. If you do that you need to use ms.Length
, which will tell you the actual length. Alternatively, ms.ToArray()
may be used, but that involves an extra copy.
My advice: keep using GetBuffer(), but only write ms.Length bytes, not buffer.Length bytes.
Once you have removed these extra incorrect zeros, I expect you'll find it works.
I realize the main developer @MarcGravell already answered but I just wanted to share my own $0.02 that helped me on this issue. If I have a fixed size byte[] and get a count of bytes read in return, I can just specify that in the MemoryStream declaration and it solves the issue. Also, as it applies to the OP, don't declare the MemoryStream until you're done reading.
byte[] msg = new byte[4096];
int bytesRead = someStreamClass.Read(msg, 0, 4096);
using (MemoryStream ms = new MemoryStream(msg, 0, bytesRead))
{
logData = Serializer.Deserialize<LogData>(ms);
}
@MarcGravell: Thanks for this great library!