Normalerweise gibt das deserialisieren eine Instanz eines Objekts Function Deserialize(byval PfadZurDatei) as Object zurück.
Das kannst du eine Variable diesen Typs casten
VB.NET-Quellcode
dim test as DeineKlasse =CType(bf.Deserialize(cryptoS), DeineKlasse)
@nafets3646: Das müsste schon AddRange heißen, da ich ein Array von ListviewItems hinzufüge. @fichz: Ich serialisiere eine Array von ListviewItems. Dewegen müsste es eigentlich funktionieren. Hätte es vielleichts erwähnen sollen.
Vielleicht sollte ich mal mein ganzen Vorhaben beschreiben...
Ich habe bisscher eine Listview(bzw. die enthaltenen Items) serialisiert und über einen CryptoStream(TrippleDES) verschlüsselt.
Das hat auch funktioniert ebenso das Entschlüsseln. (keySave in Showroom)
Jetzt wollte ich jedoch den Verschlüsselungsalgorithmus in Rijndael ändern, da dieser sicherer ist.
Hier mein Code fürs Verschlüsseln:
Dim bf AsNew System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
'Listview vorbereiten & mit Stream füllen
listview.Items.Clear()
listview.Items.AddRange(bf.Deserialize(cryptoS))
'Streams schließen
'cryptoS.Close()
fileS.Close()
Wenn ich den CryptoStream jeweils auslassen und den Stream vom serialisieren direkt in den fielS (FileStream) schicke funktioniert es wunderbar...
Ich hoffe der Fehler ist nicht zu peinlich
Wenn du ein Array serialisierst dann musst du es beim deserialisieren halt zurück in Array casten.
Vermutlich hast kein Option Strict On aktiviert, da sonst eigentlich ein Fehler aufscheinen müsste.
Deserialize gibt ein Objekt (das ist kein Array) zurück. msdn.microsoft.com/de-de/library/b85344hz(v=vs.80).aspx
OK, was gibt er mir dann zurück?
Ich habs jetzt mal mit DirectCast probiert, er bringt jedoch den selben fehler wie vorher: Kein oberstes Objekt.
und zwar beim cryptoS!
Hab zum Testen nochmal nen neues Projekt angelegt und bin Zeile für Zeile das Tut durchgegangen.
Und es hat funktioniert. Hab also den Code ins eigentliche Projekt übertragen und so wenig wir möglich geändert. Funktioniert jetzt!
Ich weiß immer noch nicht genau woran es genau gelegen hat.
(Hab auch nen bisschen den Überblick verloren, was ich geändert habe und nicht... Vielleicht ist jemand Motiviert und findet den entscheidenden Unterschied)