Cambie las propiedades implementadas automáticamente a normal y deserialización con BinaryFormatter
Tengo un objeto con una propiedad implementada como
public String Bla {get;set;}
Después de cambiar la implementación a algo como
private String _bla;
public String Bla
{
get { return _bla; }
set { _bla = value; }
}
En la deserialización, esta propiedad aparece vacía.
Tengo muchos datos serializados de la implementación anterior, y me gustaría cargarlos con la nueva implementación.
¿Hay alguna forma de cambiar la implementación para que sea compatible con archivos binarios más antiguos?
EDITAR:
Algunas personas pueden tener el mismo problema, así que aquí está mi solución de hackers:
los campos generados automáticamente tienen una convención de nomenclatura que no es un código c # válido:
[CompilerGenerated]
private string <MyField>k__BackingField;
[CompilerGenerated]
public void set_MyField(string value)
{
this.<MyField>k__BackingField = value;
}
[CompilerGenerated]
public string get_MyField()
{
return this.<MyField>k__BackingField;
}
La solución rápida y sucia para mí era crear un campo de respaldo privado llamadoxMyFieldxK__BackingField
en la fuente,
y parcheando los datos binarios serializados reemplazando todas las apariciones de<MyField>
conxMyFieldx
antes de la deserialización