Eppure non riesco a far funzionare questa conversione da Memorystream a stringa e viceversa. Nel momento in cui tenta la deserializzazione della memorystream costruita da stringa, dà questo messaggio di errore:
"Fine del flusso raggiunta prima del termine dell'analisi"
Il problema non sembra essere nella serializzazione/deserializzazione in quanto questi vengono eseguiti correttamente se si escludono i passi intermedi di conversione da memorystream a stringa e viceversa.
Inoltre ho notato che quando converto la Memorystream passando per un buffer matrice di bytes, la lunghezza è X ma quando con il processo inverso viene riconvertita la stringa nel buffer di bytes, la sua lunghezza è X+8.
Questo è il semplice codice che stò provando:
Imports System.IO
Imports System.Text
Imports System.ComponentModel
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Form1
<DesignerSerializationVisibility( _
DesignerSerializationVisibility.Content)> _
Public TableC As New Microsoft.VisualBasic.Collection()
Public Structure Struttura
Public A As String
Public B As Integer
Public C As Integer
Public D As Integer
Public E As Integer
Public F As Integer
Public G As Integer
Public H As Integer
End Structure
Public Sub Start() Handles Me.Load
Dim S As New Struttura
A="prova"
TableC.Add(S)
Dim ms As MemoryStream = Serialize(TableC)
Dim buffer(ms.Length) As Byte
ms.Read(buffer, 0, ms.Length)
Dim MyString As String = System.Text.Encoding.UTF8.GetString(buffer)
ms.Dispose()
MsgBox(buffer.Length)
Dim buffer1() As Byte = Encoding.UTF8.GetBytes(MyString)
Dim ms1 As New MemoryStream
ms1.Write(buffer1, 0, buffer1.Length)
MsgBox(buffer1.Length)
'---deserializzazione
Dim NewObj As Collection
NewObj = Deserialize(ms1)
End Sub
Function Serialize(ByVal Obj As Collection) _
As MemoryStream
Dim ms As New MemoryStream
Dim fs As New FileStream("c:\File.dat", _
FileMode.Create, _
FileAccess.Write)
Dim formatter As New BinaryFormatter
formatter.Serialize(ms, Obj)
formatter.Serialize(fs, Obj)
ms.Position = 0
Return ms
End Function
Function Deserialize(ByVal ms As MemoryStream) _
As Collection
Dim formatter As New BinaryFormatter
Return formatter.Deserialize(ms)
End Function
End Class
Qualcuno potrebbe aiutarmi a trovare l'inghippo? Grazie.