Alguien ha tenido problemas para serializar componentes en un archivo y leerlos, específicamente en el área donde el proveedor del componente actualiza los componentes VCL. Por ejemplo, un archivo serializado con DelphiX y luego años más tarde volver a leer con delphiY. ¿Cambian los formatos de serialización? En caso afirmativo, ¿qué se puede hacer para evitar la lectura de errores en los componentes al realizar la actualización?Serialización de componentes Delphi
Respuesta
El sistema basado en RTTI para serializar propiedades publicadas es vulnerable a cambios en los componentes. Avanzar es manejable siempre que las propiedades antiguas se mantengan en objetos nuevos. Es decir. dejas la interfaz de la propiedad como está, pero puedes descartar los contenidos si quieres. Retroceder es peor, ya que una versión más reciente de la propiedad guardada no se puede abrir en versiones anteriores, y eso será un problema.
Hay componentes/libs (http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes) que pueden agregar serialización en formato XML y esto puede ayudar un poco ya que puede elegir omitir el contenido que no conoce.
Aún debe tener en cuenta cómo diseña su contenido publicado y probablemente debería encontrar una forma de "ignorar pero propagar" el contenido que su versión actual no comprende. Esto le permitirá abrir y cambiar un archivo en un formato más nuevo mientras intenta mantener los atributos más nuevos, en lugar de eliminarlos.
Los formatos cambiarán definitivamente, ya que los proveedores agregarán características a sus componentes. La serialización simplemente enlaza todas las propiedades publicadas y las guarda en una secuencia. Cuando se vuelven a leer, cada una de las propiedades que se leen de la secuencia se volverá a establecer en el componente. Si la propiedad ya no existe, tienes un problema. No creo que puedas hacer nada al respecto además del manejo básico de excepciones.
La mejor manera de garantizar la compatibilidad es hacer su propia serialización.
Gracias por la respuesta. Estaba tratando de evitar la serialización personalizada y aprovechar la técnica de serialización de cada componente, pero con la falta de alguna forma de "parchar" una actualización a un nuevo formato de componente, supongo que la serialización personalizada es el único método.
Puede hacer nuevas versiones capaces de leer transmisiones antiguas siempre y cuando todavía tenga soporte de lectura para parámetros viejos y obsoletos. El problema radica en obtener lanzamientos viejos para leer nuevas transmisiones que no se pueden hacer sin una serialización personalizada. –
- 1. Componentes de giro y serialización
- 2. Desplazamiento sincronizado Componentes Delphi
- 3. Componentes de escaneo TWAIN para Delphi
- 4. Componentes de corrección ortográfica para Delphi
- 5. Componentes en Delphi y C++ Builder?
- 6. Componentes Delphi para usar con SQlite
- 7. ¿Alguien sabe de buenos componentes de acoplamiento Delphi?
- 8. ¿Hay bibliotecas de serialización de objetos Delphi compatibles con Generics?
- 9. ¿Qué componentes de Delphi se envían con las pruebas unitarias?
- 10. ¿Cómo puedo consultar la paleta de componentes Delphi?
- 11. Delphi 2009 clases/componentes para leer/escribir permisos de archivos
- 12. Paquete de componentes Compile Delphi (bpl) para diferentes versiones de Delphi
- 13. ¿Qué componentes y complementos IDE instala con Delphi?
- 14. Importar componentes ActiveX desarrollados con C# en Delphi 2011?
- 15. Creación de componentes: ¿unir componentes juntos?
- 16. de componentes para el cifrado
- 17. ¿Cuál es el propósito de la propiedad 'Etiqueta' de los componentes Delphi VCL?
- 18. ¿Cómo integrar archivos de ayuda de componentes en el sistema Delphi?
- 19. ¿Cómo instalar un paquete de componentes Delphi desde la línea de comandos?
- 20. Uso de componentes con reconocimiento de datos Delphi: pros y contras
- 21. Firebird: DBExpress o componentes nativos?
- 22. Analizador YAML en Delphi?
- 23. Delphi: Cómo ajustar mediante programación el orden visual de componentes con align = alTop
- 24. Evitar que Delphi IDE cree íconos de componentes en el momento del diseño
- 25. ¿Por qué algunos componentes de Delphi requieren "AOwner: TComponent" para construirlos?
- 26. Cómo llamar a una función/procedimiento de forma asíncrona en Delphi (Sin componentes)
- 27. Eliminando todos los componentes de una cierta clase en un formulario (Delphi)
- 28. Delphi 2009: "Clase no encontrada" cuando se usa el paquete de componentes
- 29. Reemplazar componentes no visuales con el código
- 30. Biblioteca Delphi JSON para XE2 disponible para la serialización de objetos
Usando VCL-Streaming puede manejar propiedades perdidas (y clases faltantes y otros errores también) cuando usa Classes.TReader directamente y escribe un controlador para el evento OnError. Encontró todo el código necesario en la unidad de Clases. La mayor desventaja es que su clase/clases deben derivarse de TComponent o al menos de TPersistent. –