Generic BinaryReader

Я пишу двоичный сериализатор/десериализатор для преобразования ряда типов объектов в/из потока байтов. Объекты представляют собой команды API и связанные с ними ответы для устройства, подключенного через Bluetooth или USB. Я использую BinaryWriterи BinaryReaderдля записи/чтения в/из потока.

Сериализатор прост. Свойства, подлежащие сериализации, помечаются атрибутом, указывающим порядок, в котором они должны быть записаны в поток байтов. Я перебираю свойства, используя дескрипторы разрешения отражения и перегрузки, выбирая правильный метод Write(...)для BinaryWriter.

Десериализатор не так прост. Опять же, я могу перебирать свойства в конкретном классе ответа, который я ожидаю, чтобы определить типы, которые должны быть прочитаны из потока. Сложность заключается в выборе правильного метода для вызова BinaryReaderдля чтения нужного мне значения. Я подумал о двух подходах.

  1. Большой оператор switch, который вызывает правильный метод ReadXXXX()в зависимости от читаемого типа.
  2. Используйте имя нужного мне типа, чтобы построить имя нужного мне метода в строке, а затем вызвать метод с помощью повторения.

Есть ли более простой способ, о котором я не думаю? Жаль, что вы не можете выполнить разрешение перегрузки на основе типа возвращаемого значения, которое вы хотите.

6
задан egrunin 27 March 2012 в 03:51
поделиться