1
在下面我將序列化類對象「ListViewCereal」到內存流中,然後將內存流的緩衝區存儲到訪問數據庫列。輸入流不是有效的二進制格式。
If chkSerialize.Checked = True Then
Dim cereal As New ListViewCereal 'class used to store item list views
Dim bin_form As New BinaryFormatter 'used to serialize and deserialize objects
Dim file_stream As New MemoryStream 'serialization stream
Dim report_row As DataRow = mycallerPreview.previewInst.SerializedDataDataSet.SavedReportLayouts.NewRow
cereal.prep_cereal(MoveItemListViewClass1, MoveItemListViewClass2, MoveItemListViewClass3)
bin_form.Serialize(file_stream, cereal)
builder.Clear()
'extract buffer and append string representation of each bit to StringBuilder "builder"
file_stream.Position = 0
Dim byteArray() As Byte = file_stream.GetBuffer()
For Each bit As Byte In byteArray
builder.Append(bit.ToString)
Next
report_row("Serialized Data") = builder.ToString 'column storing string rep. of buffer
builder.Clear()
builder.Append(txtYear.Text.ToString).Append("-").Append(txtVendor.Text.ToString).Append("-").Append(txtReport.Text.ToString)
report_row("Report Name") = builder.ToString
report_row("User Name") = "" 'TODO:setup login window to track users
mycallerPreview.previewInst.SerializedDataDataSet.SavedReportLayouts.AddSavedReportLayoutsRow(report_row)
mycallerPreview.previewInst.TableAdapterManager.UpdateAll(mycallerPreview.previewInst.SerializedDataDataSet)
file_stream.Close()
file_stream.Dispose()
mycallerPreview.Show()
mycallerPreview.previewInst.Close()
mycallerPreview.previewInst = Nothing
Else
mycallerPreview.Show()
mycallerPreview.previewInst.Close()
mycallerPreview.previewInst = Nothing
End If
在下面的代碼中,我嘗試通過引用數據庫行/列來反序列化類。
If cmbSavedLayouts.SelectedIndex <> -1 Then
Dim rep_row As DataRow = mycallerSelect2.select_secInst.SerializedDataDataSet.SavedReportLayouts.NewRow
rep_row = mycallerSelect2.select_secInst.SerializedDataDataSet.SavedReportLayouts.Rows(cmbSavedLayouts.SelectedIndex)
Dim str As String = rep_row("Serialized Data").ToString
Dim temp As Byte() = str.Select(AddressOf Byte.Parse).ToArray
Dim file_stream As New MemoryStream
file_stream.Write(temp, 0, temp.Count)
file_stream.Position = 0
Dim cereal_views As ListViewCereal = CType(bin_form.Deserialize(file_stream), ListViewCereal)
End If
我收到未處理的異常「輸入流不是有效的二進制格式」當我嘗試反序列化file_stream。我相當新,所以任何幫助表示讚賞!
正如我的預期......我讓事情比需要更加困難。感謝您的快速回答,這就像一個魅力!我也很抱歉沒有澄清屬性更多! –
我們都這麼做 - 當時看起來很好的想法很多,回想起來似乎太巧妙了一半。 – Plutonix