Estoy tratando de deserializar "SomeClass" con una versión anterior de una aplicación. Me sale este continuación excepciónDeserialización compatibilidad con versiones anteriores
System.Runtime.Serialization.SerializationException: El ObjectManager encontró un número no válido de fixups. Esto generalmente indica un problema en el formateador.
deserialización tiros excepción cuando serializar versión 0.9 y trato de deserializar utilizando la versión 0.8. Pensé que el atributo OptionalField
haría el truco, pero no fue así.
// Version 0.8
[Serializable()]
class Foo{
Bar b;
}
// Version 0.9
[Serializable()]
class Foo{
Bar b;
[OptionalField]
Zoo z;
}
Dado que no puedo cambiar la versión 0.8, ¿cómo debo añadir más estado en Foo objeto de tal manera que las versiones anteriores pueden deserializar todo lo posible?
Cualquier apuntador será muy apreciado.
Actualización 1 Bar y Zoo son otras clases que son serializables y contienen Hashtables y otras cosas serializables. Todo es serializable en esas clases. Además, no tengo puntales.
Si el campo es opcional o no es irrelevante aquí, el hecho es que la serialización no funciona en todas las versiones, AFAIK; eso no quiere decir que no se pueden agregar miembros, por supuesto que se puede, pero, por ejemplo, no puedo simplemente definir un tipo literal y deserializar los artículos serializados con los existentes, algo que tenga que ver con los ensamblajes o los tipos 'token ', Creo. –
kareph, ¿cuál es el tipo real de 'Zoo'? Recuerdo que algunos tipos (matrices) simplemente no funcionaban bien. –
¿Estaría dispuesto a usar la serialización xml en lugar de la serialización binaria? Eso sería más seguro para la versión. – code4life