2009-04-10 3 views
2

Ich habe eine geerbte Code-Basis, die in .NET 1.1 entwickelt wurde. Als ich es auf 2.0 migriert habe, habe ich eine Assembly umbenannt. Nun, ich finde, dass es notwendig sein wird, alte Dateien zu lesen, die Objekte enthalten, die von der alten Assembly und .NET 1.1 serialisiert wurden. Einige Felder wurden erfolgreich deserialisiert, die meisten werden jedoch ignoriert. Wenn ich FormatterAssemblyStyle.Full aktivieren, ich einen Fehler wie:Wie man etwas inkompatible BinaryFormatter Daten deserialisiert?

Mitglied ‚T_VERSION+s_sys_ver‘ in der Klasse ‚MyNamespace.T_VERSION‘ in dem serialisierten Stream nicht vorhanden und wird nicht mit System.Runtime.Serialization.OptionalFieldAttribute markiert.

Eine Überprüfung der Binärdatei zeigt, dass T_VERSION+s_sys_ve r in eine Form vorhanden ist, und der Feldtyp hat sich nicht geändert.

Gibt es eine Möglichkeit, die alten Formatdateien zu deserialisieren, ohne das alte Format manuell umzukehren und meine eigene manuelle Deserialisierungsroutine zu schreiben?

Antwort

5

prüfen SerializationBinder

Bei der Serialisierung ein Formatter überträgt die angeforderten Informationen eine Instanz eines Objekts von der richtigen Art und Version erstellen. Diese Information enthält im Allgemeinen den vollständigen Typnamen und den Assemblynamen des Objekts. Der Assemblyname enthält den Name, die Version und den starken Namen (siehe Strong-Named Assemblies) Hash von der Assembly. Standardmäßig verwendet Deserialisierung diese Information zum Erstellen einer Instanz eines identischen Objekts (mit Ausnahme von Assembly laden von der Sicherheitsrichtlinie eingeschränkt). Einige Benutzer müssen steuern, welche Klasse geladen werden soll, entweder , weil die Klasse zwischen Assemblys verschoben wurde oder eine andere Version von Die Klasse ist auf dem Server und Client erforderlich.