Pergunta

Alguém já teve problemas ao serializar componentes em um arquivo e lê-los de volta, especificamente na área onde o fornecedor do componente atualiza os componentes VCL.Por exemplo, um arquivo serializado com DelphiX e, anos depois, lido novamente com delphiY.Os formatos de serialização mudam e, em caso afirmativo, o que pode ser feito para evitar erros de leitura nos componentes durante a atualização.

Foi útil?

Solução

O sistema integrado baseado em RTTI para serializar propriedades publicadas é vulnerável a alterações nos componentes.Avançar é administrável desde que as propriedades antigas sejam mantidas em novos objetos.Ou sejavocê deixa a interface da propriedade como está, mas pode jogar fora o conteúdo, se quiser.Retroceder é pior - já que uma propriedade salva de versão mais recente não pode ser aberta no carregamento de uma versão mais antiga, e isso será um problema.

Existem componentes/libs (http://www.torry.net/quicksearchd.php?String=RTTI&Title=Sim) que pode adicionar serialização no formato XML e isso pode ajudar um pouco, pois você pode optar por pular o conteúdo que não conhece.

Você ainda precisa estar atento sobre como projeta seu conteúdo publicado e provavelmente deve encontrar uma maneira de "ignorar, mas propagar" conteúdo que sua versão atual não entende.Isso permitirá que você abra e altere um arquivo em um formato mais recente enquanto tenta manter os atributos mais recentes, em vez de removê-los.

Outras dicas

Os formatos mudarão definitivamente, à medida que os fornecedores adicionarão recursos aos seus componentes.A serialização simplesmente percorre todas as propriedades publicadas e as salva em um fluxo.Quando elas forem lidas de volta, cada uma das propriedades lidas do fluxo será devolvida ao componente.Se a propriedade não existir mais, você tem um problema.Eu não acho que você possa fazer nada sobre isso além de algum tratamento básico de exceções.

A melhor maneira de garantir a compatibilidade é fazer sua própria serialização.

Obrigado pela resposta.Eu estava tentando evitar a serialização personalizada e aproveitar as vantagens da técnica de serialização de cada componente, mas com a falta de qualquer maneira de "corrigir" uma atualização para um novo formato de componente, acho que a serialização personalizada é o único método.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top