Хотя кстати да. Делать сериализацию/десереализацию можно и через кодогенерацию в статике. Только вот это требует дополнительной инфраструктуры разработчика. А через рефлексию это делается проще. Возможно, что имеет смысл наложить ограничения на рефлексию и делать с помощью неё только то, что можно было бы сделать и чисто статически. А в случае, если это нельзя сделать статически, подумать, не зашли ли мы куда-то не туда, или ограничить такую практику теми случаями, когда это действительно нужно (например, интерпретатор с автодополнением вводимых команд без рефлексии никак не организовать).