Основная проблема рефлексии в том, что она медленная.Если вы не хотите использовать отражение только из-за его медлительности, вы можете кэшировать свой список свойств в каком-то статическом свойстве или классе.Я широко использовал эту технику в подобных задачах, и с производительностью проблем не было.
Если у вас священная война против отражения, вы можете создать специальную утилиту, которая анализирует файл C # (или строит ваши проекты, загружает выводсборка и использование отражения, но только перед сборкой, а не во время выполнения), находит необходимые свойства и записывает их в автоматически сгенерированный файл (возможно, также файл кода C #) в качестве инициализатора свойств массива статического класса.И вызовите этот утилитал на этапе предварительной сборки вашего проекта.Тогда вы получите все необходимые свойства полностью без отражений =) (но я бы этого не сделал)