Estoy escribiendo un serializador/deserializador binario para convertir un número de tipos de objetos en/desde un flujo de bytes. Los objetos representan los comandos API y sus respuestas asociadas para un dispositivo conectado por Bluetooth o USB. Estoy usando el BinaryWriter
& BinaryReader
para escribir/leer desde/hacia la transmisión.BinaryReader genérico
El serializador es fácil. Las características que se serializarán se etiquetan con un atributo que especifica el orden en el que se escribirán en la secuencia de bytes. Repetir las propiedades utilizando los controles de resolución y resolución de sobrecarga seleccionando el método correcto Write(...)
del BinaryWriter
.
El deserializador no es tan simple. De nuevo, puedo iterar a través de las propiedades en la clase de respuesta particular que espero determinar los tipos que deben leerse en la secuencia. El truco es escoger el método correcto para llamar al BinaryReader
y leer el valor que necesito. He pensado en dos enfoques.
- Una declaración de cambio grande que llama al método correcto
ReadXXXX()
según el tipo que se va a leer. - Use el nombre del tipo que necesito para construir el nombre del método que necesito en una cadena, y luego invoque el método usando relection.
¿Hay una manera más simple en la que no estoy pensando? Es una lástima que no puedas hacer una resolución de sobrecarga en función del tipo de devolución que desees.
Un par de opciones realmente buenas, gracias. Me estoy inclinando hacia el primero porque encajará mejor con mi código actual. Gracias por tu ayuda. –