Sequential structures using a packing of one byte. For packets with variable length strings, putting a fixed char array of one byte at the end to use with a StringPacker would do the trick. After that, you can alloc the structure on the heap and cast it to an unsafe byte pointer OR you can stackalloc the structure and copy it to a managed byte array.
That's the way I mostly did it, and that's the way I would go.