это выглядит как неплохое решение с учетом нежелания ничего делать руками. единственное, что у тебя дофига типизации, а хендлеры могли бы получать тех же dynamic'ов, если лень типизировать и сваливаться при первой же неудаче в None например. цикл до первого Some result или логгирование того, что такой-то запрос не был обработан, т.к. не нашлось хендлера.
50 строк кода с нулевой логикой для тривиального случая "жсон с 5 полями" - это "выглядит нормально"? я боюсь представить себе "ненормально", даже с опытом текущего проекта. если что, в жаве это всего лишь определение класса с нужными полями и несколько аннотаций. статических гарантий не меньше (а то и больше), чем в эфшарпе