Serialización y control de versiones de objetos en C #

Si quiero serializar un objeto tengo que usar[Serializable] atributo y todas las variables miembro se escribirán en el archivo. Lo que no sé cómo hacer versiones, por ejemplo. si agrego una nueva variable de miembro (cambio el nombre de una variable o simplemente elimino una variable) y luego abro (deserializar) el archivo, ¿cómo puedo determinar la versión del objeto / archivo para poder configurar correctamente el nuevo miembro o realizar algún tipo de migración? ¿Cómo puedo determinar si la variable se inicializó durante la carga o no (ignorada por deserializer)?

Sé que hay enfoques tolerantes a la versión y puedo marcar variables con[OptionalField(VersionAdded = 1)] atributo. Si abro un archivo antiguo, el marco ignorará este opcional (nueva variable) y será solo cero / nulo. Pero nuevamente, ¿cómo puedo determinar si la variable se inicializa por carga o si se ignoró?

Puedo escribir el número de versión de clase / objeto en la secuencia. Utilizar elISerializable enfoque y en elconstructor(SerializationInfo oInfo, StreamingContext context) Método leer este número de versión. Esto me dirá exactamente cuál es la versión de la clase en la secuencia.

Sin embargo, esperaba que este tipo de control de versiones ya estuviera implementado por el marco de transmisión en C #. Intenté obtener la versión de montaje de laSerializationInfo pero siempre se establece en la versión actual y no en la versión que se utilizó cuando se guardó el objeto.

¿Cuál es el enfoque preferido? Encontré muchos artículos en la red, pero no pude encontrar una buena solución para esto que aborde las versiones ...

Cualquier ayuda es apreciada Gracias, Abismo

Respuestas a la pregunta(1)

Su respuesta a la pregunta