Ну, так как ваши поля msgType и msgLen являются частными, я думаю, что ваш вопрос сводится к "Могу ли я заменить LoginRequest буфером протокола, который имеет конструктор без аргументов?"и ответ здесь - безоговорочное «да».
Буферы протокола заботятся о (де) сериализации полей, сохраняя при этом информацию о типе;у вас действительно нет причин писать этот код самостоятельно.Например, если вы создадите протобуф LoginRequest, вы можете просто создать его, вызвать сеттеры, чтобы установить его поля, а затем сериализовать его в поток ostring.Это, вероятно, достаточно для того, что вы хотите, верно?