2013-04-29 9 views
7

Per qualche motivo la mia domanda precedente è stata considerata troppo vaga. Quindi lasciami essere più specifico.Serialize/Deserialize array bidimensionale

Ho una matrice bidimensionale di tipo single. Voglio serializzarlo per salvare in un database di Access.

Il suggerimento era di salvarlo come campo Memo che va bene. Voglio leggere in seguito il campo Memo e deserializzare per recuperare l'array originale. Ho cercato estesamente sul web e qui e non riesco a trovare la risposta. Credo di serializzare correttamente la matrice ma non so come deserializzare.

Questo codice sembra funzionare per la serializzazione, ma non riesco a capire come deserializzare:

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 

ho quindi salvare byArr al campo Memo.

Fornire il codice di esempio.

+0

La tua domanda precedente era davvero piuttosto vaga. Le persone su SO tendono a disapprovare la mancanza di dettagli. Questa domanda è ben formulata. +1 – Neolisk

risposta

1

È possibile deserializzare tramite convertitore Base64:

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

Questo può sembrare un po 'scomodo, ma funziona - testato in una console app in VS 2010.

credito va here. Attraverso questo link, puoi anche trovare la versione completa del codice con cui giocare.

+0

Ho provato il seguente codice ma ottengo un errore Impossibile eseguire il cast dell'oggetto di tipo System.String per digitare System.Byte [] Ciò si verifica quando si esegue Convert.ToBase64String nel seguente codice: Dim f As New System.Runtime.Serialization. Formatters.Binary.BinaryFormatter Dim ms come nuovo MemoryStream f.Serialize (ms, ARLHS) Dim byArr As Byte() = ms.ToArray –

+0

qualcuno può dirmi come formattare le risposte? –

+0

Spiacente, ho incollato il codice sbagliato. Qui è il codice corretto (e .Item ("LHS") viene salvato come campo Memo in Access): Dim theArrayAsString As String = Convert.ToBase64String (dtLHS.Rows (0) .Item ("LHS")) Dim ms2 As New MemoryStream (Convert.FromBase64String (theArrayAsString)) Dim newLHS (,) As Single = f.Deserialize (ms2) –

0

Ho modificato il tipo di dati del campo Accesso da Memo a Oggetto OLE e sembra funzionare. Quando guardo i dati in Access che mi dice che il campo è "dati binari Long" e sono stato in grado di utilizzare il seguente codice dopo aver letto il record da Access:

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)

È corretto?

+0

Su StackOverflow è raro fare domande nelle risposte. Capisco che questo sia direttamente correlato alla domanda, ma ti preghiamo di creare un'altra domanda per questo. È più probabile che tu abbia le risposte in questo modo. – Neolisk

+0

Ciao Neolisk, apprezzo il tuo contributo su come diventare un buon membro di Stackoverflow. Voglio seguire l'etichetta corretta. Ho fatto una nuova domanda perché non riuscivo a vedere come formattare una risposta di commento contenente il codice. Puoi indicarmi le istruzioni su come farlo? –

+0

La tua domanda originale è come 'Serializzare/Deserializzare array bidimensionale', che ho cercato di coprire nella mia risposta. Il lato del database di esso è correlato nel tuo caso, ma generalmente una domanda diversa. Usa la funzione 'Chiedi domanda' nell'angolo in alto a destra di ogni pagina e in quella altra domanda specifica del tuo problema con i tipi di database. Dal tuo post in alto, non mi è chiaro a cosa si riferisca "È corretto?", Quindi ti preghiamo di approfondirlo nella tua nuova domanda. Grazie! – Neolisk