2013-04-29 43 views
7

Vì lý do nào đó, câu hỏi trước của tôi được coi là quá mơ hồ. Vì vậy, hãy để tôi cụ thể hơn.Serialize/Deserialize mảng hai chiều

Tôi có một mảng 2 chiều loại duy nhất. Tôi muốn tuần tự hóa nó để lưu trong cơ sở dữ liệu Access.

Đề xuất là lưu nó dưới dạng trường Bản ghi nhớ. Tôi muốn đọc trường Bản ghi nhớ và deserialize nó để lấy mảng ban đầu. Tôi đã tìm kiếm rộng rãi trên web và ở đây và không thể tìm thấy câu trả lời. Tôi tin rằng tôi đang serializing mảng một cách chính xác nhưng không biết làm thế nào để deserialize nó.

Mã này dường như làm việc cho serializing nhưng tôi không thể tìm ra cách để deserialize:

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 

sau đó tôi lưu byArr đến lĩnh vực Memo.

Vui lòng cung cấp mã mẫu.

+0

Câu hỏi trước của bạn thực sự khá mơ hồ. Những người trên SO có xu hướng cau mày vì thiếu chi tiết. Câu hỏi này được diễn đạt tốt. +1 – Neolisk

Trả lời

1

Bạn có thể deserialize nó thông qua chuyển đổi 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) 

này có thể trông hơi vụng về, nhưng nó hoạt động - được thử nghiệm trong một ứng dụng giao diện điều khiển trong VS 2010.

tín dụng đi here. Thông qua liên kết này, bạn cũng có thể tìm phiên bản đầy đủ của mã để phát.

+0

Tôi đã thử đoạn mã sau nhưng nhận được một lỗi Không thể truyền đối tượng kiểu System.String để gõ System.Byte [] Điều này xảy ra khi thực hiện Convert.ToBase64String trong đoạn mã sau: Dim f As New System.Runtime.Serialization. Formatters.Binary.BinaryFormatter Dim ms Là bộ nhớ mớiStream f.Serialize (ms, arLHS) Dim byArr Như Byte() = ms.ToArray –

+0

Ai đó có thể cho tôi biết cách định dạng trả lời? –

+0

Xin lỗi, tôi đã dán mã sai. Đây là mã chính xác (và .Item ("LHS") được lưu dưới dạng trường Ghi nhớ trong Access): Dim theArrayAsString As String = Convert.ToBase64String (dtLHS.Rows (0) .Item ("LHS")) Dim ms2 As MemoryStream mới (Convert.FromBase64String (theArrayAsString)) Dim newLHS (,) Là đơn = f.Deserialize (ms2) –

0

Tôi đã thay đổi kiểu dữ liệu của trường Truy cập từ Ghi nhớ thành đối tượng OLE và dường như hoạt động. Khi tôi nhìn vào các dữ liệu trong Access nó nói với tôi lĩnh vực này là "dữ liệu nhị phân Long" và tôi đã có thể sử dụng đoạn mã sau sau khi đọc các bản ghi từ 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)

là đúng này?

+0

Trên StackOverflow, không có gì lạ khi đặt câu hỏi trong câu trả lời. Tôi hiểu điều này liên quan trực tiếp đến câu hỏi, nhưng hãy cẩn thận để tạo một câu hỏi khác cho câu hỏi đó. Bạn có nhiều khả năng để có được câu trả lời theo cách này là tốt. – Neolisk

+0

Hi Neolisk, tôi đánh giá cao ý kiến ​​của bạn về cách trở thành thành viên tốt của Stackoverflow. Tôi muốn tuân theo nghi thức chính xác. Tôi đã hỏi một câu hỏi mới vì tôi không thể xem cách định dạng trả lời nhận xét chứa mã. Bạn có thể chỉ cho tôi hướng dẫn về cách thực hiện điều đó không? –

+0

Câu hỏi ban đầu của bạn là làm thế nào để 'Serialize/Deserialize mảng hai chiều', mà tôi đã cố gắng để trang trải trong câu trả lời của tôi. Phía cơ sở dữ liệu của nó có liên quan trong trường hợp của bạn, nhưng nói chung là một câu hỏi khác. Sử dụng tính năng 'Hỏi câu hỏi' ở góc trên cùng bên phải của mỗi trang, và trong câu hỏi khác đó là cụ thể về vấn đề của bạn với các kiểu cơ sở dữ liệu. Từ bài viết của bạn ở trên, nó không rõ ràng cho tôi những gì 'Đây là chính xác? 'Là đề cập đến, vì vậy xin vui lòng giải thích về điều đó trong câu hỏi mới của bạn. Cảm ơn! – Neolisk

Các vấn đề liên quan