Pregunta

¿Alguien ha tenido problemas al serializar componentes en un archivo y volver a leerlos, específicamente en el área donde el proveedor de componentes actualiza los componentes VCL?Por ejemplo, un archivo serializado con DelphiX y años más tarde leído con delphiY.¿Cambian los formatos de serialización y, de ser así, qué se puede hacer para evitar errores de lectura en los componentes durante la actualización?

¿Fue útil?

Solución

El sistema integrado basado en RTTI para serializar propiedades publicadas es vulnerable a cambios en los componentes.Seguir adelante es manejable siempre que las propiedades antiguas se mantengan en los objetos nuevos.Es decir.deja la interfaz de propiedad como está, pero puede desechar el contenido si lo desea.Ir hacia atrás es peor, ya que una propiedad guardada de una versión más nueva no se puede abrir en la carga de una versión anterior, y eso será un problema.

Hay componentes/libs (http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes) que puede agregar serialización en formato XML y esto puede ayudar un poco, ya que puede optar por omitir contenido que no conoce.

Aún debe tener en cuenta cómo diseña el contenido publicado y probablemente debería encontrar una manera 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 conservar los atributos más nuevos, en lugar de eliminarlos.

Otros consejos

Los formatos definitivamente cambiarán, a medida que los proveedores agregarán funciones a sus componentes.La serialización simplemente recorre 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 restablecerán en el componente.Si la propiedad ya no existe, tienes un problema.No creo que puedas hacer nada al respecto además de un manejo básico de excepciones.

La mejor manera de garantizar la compatibilidad es realizar 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 debido a la falta de alguna forma de "parchear" una actualización a un nuevo formato de componente, supongo que la serialización personalizada es el único método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top