2013-04-29 21 views
7

Z jakiegoś powodu moje poprzednie pytanie zostało uznane za zbyt ogólnikowe. Więc pozwól mi być bardziej konkretnym.Szereguj/Deserializuj dwuwymiarową tablicę

Mam dwuwymiarową tablicę typu singiel. Chcę serializować go, aby zapisać w bazie danych programu Access.

Propozycja polegała na zapisaniu go jako pola Memo, które jest w porządku. Chcę później odczytać pole Memo i deserializować go, aby pobrać oryginalną tablicę. Mam obszerne wyszukiwanie w Internecie i tutaj i nie mogę znaleźć odpowiedzi. Wydaje mi się, że poprawnie szereguję tablicę, ale nie wiem, jak ją przekształcić.

Kod ten wydaje się działać dla szeregowania, ale nie mogę dowiedzieć się, jak deserializowania:

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 

I następnie zapisać byArr do pola Memo.

Proszę podać przykładowy kod.

+0

Twoje poprzednie pytanie było raczej niejasne. Ludzie na SO zwykle marszczą brwi na brak szczegółów. To pytanie jest dobrze sformułowane. +1 – Neolisk

Odpowiedz

1

Można deserializować go poprzez konwerter 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) 

To może wyglądać nieco niewygodne, ale to działa - testowane w aplikacji konsoli w VS 2010.

zasługa here. Za pomocą tego linku możesz również znaleźć pełną wersję kodu do gry.

+0

Próbowałem następujący kod, ale dostaję błąd Nie można rzucić obiektu typu System.String do wpisz System.Byte [] To występuje podczas wykonywania Convert.ToBase64String w następującym kodzie: Dim f Jako New System.Runtime.Serialization. Formatters.Binary.BinaryFormatter Dim ms jako nowy MemoryStream f.Serialize (ms, arLHS) As Byte Dim byArr() = ms.ToArray –

+0

Czy ktoś może mi powiedzieć jak formatować odpowiedzi? –

+0

Przykro mi, wkleiłem nieprawidłowy kod. Tutaj jest poprawny kod (i .Item ("LHS") jest zapisywany jako pole Memo w programie Access): Dim theArrayAsString As String = Convert.ToBase64String (dtLHS.Rows (0). Element ("LHS")) Dim ms2 As Nowy MemoryStream (Convert.FromBase64String (theArrayAsString)) Dim newLHS (,) Jako pojedynczy = f.Deserialize (ms2) –

0

Zmieniłem typ danych pola Dostęp z notatki na obiekt OLE i to wydaje się działać. Kiedy patrzę na danych w programie Access mówi mi pole jest „Długi dane binarne” i udało mi się użyć następującego kodu po przeczytaniu rekordu z programu 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)

Czy jest to prawidłowe?

+0

W StackOverflow nie jest często zadawać pytania w odpowiedziach. Rozumiem, że jest to bezpośrednio związane z pytaniem, ale proszę zadbaj o to, by stworzyć dla niego kolejne pytanie. Bardziej prawdopodobne jest również uzyskanie odpowiedzi w ten sposób. – Neolisk

+0

Witaj Neoliskuku, doceniam twój wkład, jak być dobrym członkiem Stackoverflow. Chcę przestrzegać właściwej etykiety. Zadałem nowe pytanie, ponieważ nie widziałem sposobu sformatowania odpowiedzi na komentarz zawierającej kod. Czy możesz wskazać mi instrukcje, jak to zrobić? –

+0

Twoje pierwotne pytanie brzmi: jak "Serializować/Deserializować dwuwymiarową tablicę", którą próbowałem ukryć w mojej odpowiedzi. Strona bazy danych jest powiązana w twoim przypadku, ale generalnie inne pytanie. Użyj funkcji "Zadaj pytanie" w prawym górnym rogu każdej strony, aw tym drugim pytaj o problem z typami baz danych. Z twojego wpisu powyżej nie jest dla mnie jasne, o czym mówi "Czy to jest poprawne?", Więc proszę, rozwiąż to w swoim nowym pytaniu. Dzięki! – Neolisk

Powiązane problemy