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

questionAnswers(1)

yourAnswerToTheQuestion