Ändern Sie die automatisch implementierten Eigenschaften mit BinaryFormatter auf Normal und Deserialisierung
Ich habe ein Objekt mit einer Eigenschaft wie implementiert
public String Bla {get;set;}
Nach dem Ändern der Implementierung auf so etwas wie
private String _bla;
public String Bla
{
get { return _bla; }
set { _bla = value; }
}
Bei der Deserialisierung ist diese Eigenschaft leer.
Ich habe viele serialisierte Daten aus der alten Implementierung und möchte sie mit der neuen Implementierung laden
Gibt es eine Möglichkeit, die Implementierung so zu ändern, dass sie mit älteren Binärdateien kompatibel ist?
BEARBEITEN:
Einige Leute könnten auf dasselbe Problem stoßen, also hier ist meine hackische Lösung:
Die automatisch generierten Felder haben eine Namenskonvention, die ungültiger c # -Code ist:
[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;
}
Die schnelle und schmutzige Lösung für mich bestand darin, ein privates Sicherungsfeld mit dem Namen zu erstellenxMyFieldxK__BackingField
in der Quelle,
und Patchen der serialisierten Binärdaten durch Ersetzen aller Vorkommen von<MyField>
mitxMyFieldx
vor der Deserialisierung