Serialização e versionamento de objetos em c #
Se eu quiser serializar um objeto eu tenho que usar[Serializable]
atributo e todas as variáveis de membro serão gravadas no arquivo. O que eu não sei como fazer versões, por exemplo se eu adicionar uma nova variável de membro (renomear uma variável ou apenas remover uma variável) e então abrir (desserializar) o arquivo como posso determinar a versão do objeto / arquivo para que eu possa definir corretamente o novo membro ou fazer algum tipo de migração? Como posso determinar que a variável foi inicializada durante o carregamento ou não (ignorada pelo desserializador).
Eu sei que existem abordagens tolerantes à versão e posso marcar variáveis com[OptionalField(VersionAdded = 1)]
atributo. Se eu abrir um arquivo antigo, o framework irá ignorar esta opção (nova variável) e será apenas zero / nulo. Mas, novamente, como posso determinar se a variável é inicializada por carga ou foi ignorada.
Eu posso escrever o número da versão da classe / objeto para o fluxo. Use oISerializable
abordagem e noconstructor(SerializationInfo oInfo, StreamingContext context)
método ler este número de versão. Isso vai me dizer exatamente qual é a versão da classe no fluxo.
No entanto, eu esperava que esse tipo de versão já fosse implementado pela estrutura de streaming em C #. Eu tentei obter a versão Assembly a partir doSerializationInfo
mas é sempre definido para a versão atual e não para a versão que foi usada quando o objeto foi salvo.
Qual é a abordagem preferida? Eu encontrei um monte de artigos na net, mas eu não consegui encontrar uma boa solução para isso, que aborda o versionamento ...
Qualquer ajuda é apreciada Obrigado, Abyss