public unsafe static T Deserialize <T>(byte[] source) where T : struct { // create new buffer for body bytes // the header size is substracted directly // because it was serialized directly var headerSize = MemUtils.Sizeof <MessageHeader>(); var dest = new byte[source.Length - headerSize]; Buffer.BlockCopy(source, headerSize, dest, 0, dest.Length); return(Serializer.Deserialize <T>(dest)); }
public unsafe static byte[] Serialize <T>(T body, MessageHeader header) where T : struct { // serialize header and body var headerSize = MemUtils.Sizeof <MessageHeader>(); var headerBytes = MemUtils.Copy((byte *)&header, 0, headerSize); var bodyBytes = Serializer.Serialize <T>(body); // merge serialized parts into buffer var dest = new byte[bodyBytes.Length + headerBytes.Length]; Buffer.BlockCopy(headerBytes, 0, dest, 0, headerBytes.Length); Buffer.BlockCopy(bodyBytes, 0, dest, headerBytes.Length, bodyBytes.Length); return(dest); }