How about this - assign a pointer to the struct's location in memory.
Send W, then the same amount of bytes to fill the struct.
void CheckSerial(){
uint8_t *pPtr = (uint8_t *)&configuration;
if (Serial.available() > 0){
switch (Serial.read()){
case 'W':
// what if the W was erroneous... Watch for a timeout here perhaps?
while(serial.available()<sizeof(config_t))
delay(100);
for(int i=0;i<sizeof(config_t);i++)
*pPtr++ = Serial.read();
PrintConfig();
EEPROM_writeAnything(0, configuration);
break;
...