how ever i am getting bad data on the RX side.
You ought to be checking for received messages using radio.available() rather than trying to read regardless.
You should zero out the receive buffer before you do the read, so that you know that what you see afterwards really did come from the radio. (Otherwise you could just be looking at garbage you left in the buffer.)
If you can't get the struct transmission working then replace that with some dummy code to send a fixed string and then print out what you received for comparison. Do you receive one message per message sent? Does it have the right length? Does the content bear any relation to what was sent?