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.