Я пишу двоичный сериализатор/десериализатор для преобразования ряда типов объектов в/из потока байтов. Объекты представляют собой команды API и связанные с ними ответы для устройства, подключенного через Bluetooth или USB. Я использую BinaryWriter
и BinaryReader
для записи/чтения в/из потока.
Сериализатор прост. Свойства, подлежащие сериализации, помечаются атрибутом, указывающим порядок, в котором они должны быть записаны в поток байтов. Я перебираю свойства, используя дескрипторы разрешения отражения и перегрузки, выбирая правильный метод Write(...)
для BinaryWriter
.
Десериализатор не так прост. Опять же, я могу перебирать свойства в конкретном классе ответа, который я ожидаю, чтобы определить типы, которые должны быть прочитаны из потока. Сложность заключается в выборе правильного метода для вызова BinaryReader
для чтения нужного мне значения. Я подумал о двух подходах.
ReadXXXX()
в зависимости от читаемого типа.Есть ли более простой способ, о котором я не думаю? Жаль, что вы не можете выполнить разрешение перегрузки на основе типа возвращаемого значения, которое вы хотите.