Entwickler-Ecke
IO, XML und Registry - Deserialisierung in anderem Programm
Raven280438 - So 24.10.10 20:44
Titel: Deserialisierung in anderem Programm
Hi,
ich hab in einem Programm eine Klasse serialisiert und in einer Datei gespeichert.
Jetzt will ich in einem anderen Programm die Klasse wieder deserialisieren. Die Klasse liegt in beiden Programmen in einer DLL vor, ist also überall exakt gleich.
Der Code zum Deserialisieren lautet wie folgt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| try { FileInfo fi = new FileInfo(filename); if (!this.texturen.ContainsKey(fi.Name)) { CSTTexture tex = new CSTTexture(); BinaryFormatter binF = new BinaryFormatter(); FileStream fs = new FileStream(filename, FileMode.Open);
tex = (CSTTexture)binF.Deserialize(fs);
this.texturen.Add(fi.Name, tex); fs.Flush(); fs.Close(); }
return true; } catch (Exception e) { MessageBox.Show(e.ToString(), "fehler"); return false; } |
Aber dabei bekomm ich folgende Exception:
Wie kann ich in dem Anderen Programm die Klasse deserialisieren?
Gruß
Christoph1972 - So 24.10.10 21:09
Hi,
in der serialisierten Datei wird scheinbar der Name des Assemblies abgelegt. Ich habe gestern den Namen meines akktuellen Projekts verändert und hatte dann die gleiche Fehlermeldung. Der Link von jaenicke sollte aber abhilfe schaffen.
Kha - So 24.10.10 21:57
Raven280438 hat folgendes geschrieben : |
Die Klasse liegt in beiden Programmen in einer DLL vor |
Wenn das die "ST-Texturer"-Assembly ist, deckt sich das aber nicht wirklich mit der Fehlermeldung, nach der sie eben nicht vorliegt, oder?
Grundsätzlich muss aber jedem (@Christian ;) ) klar sein, dass der BinaryFormatter eigentlich nur für Remoting gedacht ist, keine Versionierung kennt und bei der kleinsten Änderung zusammenbricht. Es gibt andere binäre Serialisierer wie protobuf-net, die das Datei-Format ordentlich spezifizieren und nicht dem Zufall überlassen.
Raven280438 - Mo 25.10.10 15:25
Hi,
danke für die Antworten.
Wie genau funktioniert das mit dem Binder? Was muss ich machen, damit das bei meinem Programm auch läuft?
Gruß
Raven280438 - Mo 25.10.10 15:46
Nachtrag:
Oh den Post von Kha hab ich ganz übersehn. Ich werd mir protobuf-net mal ansehn ;)
Raven280438 - Mo 25.10.10 20:18
Hi,
habs getestet und es funktioniert. ;)
Meine Frage ist aber, was passiert, wenn ich an der Klasse die serialisiert wird irgendwas ändere? Wie bekomm ich das hin, dass ich die trotzdem noch einlesen kann und die fehlenden Attribute mit Standard-Werten fülle?
Gruß
Raven280438 - Mo 25.10.10 20:29
Hi,
ne ich hab jetzt Protobuf eingesetzt, weil ich das ja in verschiedenen Programmen nutzen will.
Raven280438 - Di 26.10.10 15:59
Hi,
ich will jetzt auch mal das mit dem BinaryFormatter versuchen.
Kann mir jemand erklären, wie genau das mit dem Binder funktioniert?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!