Ho due metodi che dovrebbero rispettivamente l'uno salvare e l'altro leggere i dati da un file. I dati sono contenuti in una collezione di oggetti a tipizzazione forte, e vengono salvati mediante serializzazione binaria. Questi sono i rispettivi codici:
codice:
If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
If Save.FilterIndex = 6 Then
Dim Serializer As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
Dim Layers As New List(Of Layer)
Dim Stream As New IO.FileStream(Save.FileName, IO.FileMode.Create)
For Each L As ListViewItem In lstLayers.Items
Layers.Add(L.Tag)
Next
Serializer.Serialize(Stream, Layers)
Stream.Close()
Else
SaveDrawing(Save.FileName)
End If
End If
e:
codice:
If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim Serializer As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
Dim Layers As New List(Of Layer)
Dim Stream As New IO.FileStream(Open.FileName, IO.FileMode.Open)
Layers = Serializer.Deserialize(Stream) '<---------- Errore!
Stream.Close()
For Each Layer As Layer In Layers
Dim L As New ListViewItem
L.Text = Layer.Name
L.ImageIndex = 0
L.Tag = Layer
L.Checked = True
lstLayers.Items.Add(L)
If Layer.Index > MaxIndex * 10 Then
MaxIndex = Layer.Index \ 10 + 2
End If
Next
End If
L'eccezione riscontrata nel punto indicato è di tipo SerializationExeption, e riporta il seguente testo:
"Il flusso di input non è un formato binario valido. Il contenuto iniziale (in byte) è: 89-50-4E-47-0D-0A-1A-0A-00-00-00-0D-49-48-44-52-00 ..."
Non capisco dove sia l'errore, dato che la serializzazione NON è fatta a mano, e tutti i tipi sono esplicitamente dichiarati serializzabili. Qualcuno può aiutarmi?