2013-04-29 15 views
7

Aus irgendeinem Grund wurde meine vorherige Frage als zu vage betrachtet. Lass mich genauer sein.Serialisieren/Deserialisieren eines zweidimensionalen Arrays

Ich habe ein zweidimensionales Array des Typs single. Ich möchte es serialisieren, um in einer Access-Datenbank zu speichern.

Der Vorschlag war, es als Memo-Feld zu speichern, das ist in Ordnung. Ich möchte später das Feld Memo lesen und deserialisieren, um das ursprüngliche Array abzurufen. Ich habe ausführlich im Internet und hier gesucht und kann die Antwort nicht finden. Ich glaube, dass ich das Array korrekt serialisiere, aber nicht weiß, wie man es deserialisiert.

Dieser Code erscheint für die Serialisierung zu arbeiten, aber ich kann nicht herausfinden, wie man deserialisieren:

Dim f As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
Dim ms As New MemoryStream 
f.Serialize(ms, arLHS) 
Dim byArr As Byte() = ms.ToArray 

ich dann auf das Memo-Feld speichern byArr.

Bitte geben Sie Beispielcode ein.

+0

Ihre vorherige Frage war in der Tat ziemlich vage. Menschen in SO neigen dazu, die fehlenden Details zu missbilligen. Diese Frage ist gut formuliert. +1 – Neolisk

Antwort

1

Sie können es über Base64-Wandler deserialisieren:

Dim str_b64 As String = Convert.ToBase64String(byArr) 
Dim ms2 As New MemoryStream(Convert.FromBase64String(str_b64)) 
Dim intArr2(,) As Int32 = f.Deserialize(ms2) 

Diese etwas umständlich aussehen, aber es funktioniert - in einer Konsolenanwendung in VS 2010

Kredit geht here getestet. Über diesen Link können Sie auch die Vollversion des Codes zum Spielen finden.

+0

Ich habe den folgenden Code versucht, aber einen Fehler erhalten Darf nicht Objekt des Typs System.String in System.Byte [] konvertieren Dies tritt auf, wenn Sie Convert.ToBase64String im folgenden Code ausführen: Dim f As New System.Runtime.Serialization. Formatters.Binary.BinaryFormatter Dim ms As New Memory f.Serialize (ms, ARLHS) Dim byArr As Byte() = ms.ToArray –

+0

Kann mir jemand sagen, wie die Antworten zu formatieren? –

+0

Entschuldigung, ich habe falschen Code eingefügt. Hier ist korrekter Code (und .Item ("LHS") wird als Memo-Feld in Access gespeichert): Dim theArrayAsString As String = Konvertieren.ToBase64String (dtLHS.Rows (0) .Item ("LHS")) Dim ms2 As Neuer MemoryStream (Convert.FromBase64String (theArrayAsString)) Dim newLHS (,) als Single = f.Deserialize (ms2) –

0

Ich habe den Datentyp des Feldes Zugriff von Memo zu OLE-Objekt geändert und das scheint zu funktionieren. Wenn ich die Daten in Access sehen es sagt mir, ist das Feld „Lange Binärdaten“ und ich konnte den folgenden Code verwenden, nachdem die Aufzeichnung von Access zu lesen:

Dim f As New System.Runtime.Serialization.Formatters.BinaryFormatter
Dim byArr As Byte()
byArr = DirectCast(dtLHS.Rows(0).Item("LHS"), Byte())
Dim theArrayAsString As String = Convert.ToBase64String(byArr)
Dim ms2 As New MemoryStream(Convert.FromBase64String(theArrayAsString))
Dim newLHS(,) as single = f.Deserialize(ms2)

dies richtig ist?

+0

Auf StackOverflow ist es unüblich, Fragen in den Antworten zu stellen. Ich verstehe, dass dies direkt mit der Frage zusammenhängt, aber bitte achte darauf, eine andere Frage dafür zu stellen. Sie werden wahrscheinlich auch Antworten auf diese Weise erhalten. – Neolisk

+0

Hallo Neolisk, ich schätze deinen Beitrag, wie man ein gutes Mitglied von Stackoverflow sein kann. Ich möchte der richtigen Etikette folgen. Ich habe eine neue Frage gestellt, weil ich nicht sehen konnte, wie eine Kommentarantwort mit Code formatiert werden sollte. Kannst du mir Anweisungen geben, wie das geht? –

+0

Ihre ursprüngliche Frage ist, wie man "zweidimensionales Array serialisiert/deserialisiert", das ich in meiner Antwort zu behandeln versuchte. Datenbankseite davon ist in Ihrem Fall verwandt, aber generell eine andere Frage. Verwenden Sie die Funktion "Frage stellen" in der oberen rechten Ecke jeder Seite, und stellen Sie in dieser anderen Frage spezifische Informationen zu Ihrem Problem mit Datenbanktypen bereit. Von Ihrem Beitrag oben ist mir nicht klar, was "Ist das korrekt?" Bezieht sich auf, also bitte erläutern Sie das in Ihrer neuen Frage. Vielen Dank! – Neolisk

Verwandte Themen