7

出于某种原因,我之前的问题被认为过于模糊。所以让我更具体一点。

我有一个单一类型的二维数组。我想将其序列化以保存在 Access 数据库中。

建议是将其保存为备忘录字段,这很好。我想稍后阅读备忘录字段并将其反序列化以检索原始数组。我在网上和这里进行了广泛搜索,但找不到答案。我相信我正确地序列化了数组,但不知道如何反序列化它。

此代码似乎适用于序列化,但我不知道如何反序列化:

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

然后我将 byArr 保存到备注字段。

请提供示例代码。

4

2 回答 2

1

您可以通过 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)

这可能看起来有些尴尬,但它确实有效 - 在 VS 2010 的控制台应用程序中进行了测试。

信用在这里。通过这个链接,你还可以找到完整版的代码来玩。

于 2013-04-29T18:08:36.423 回答
0

我将 Access 字段的数据类型从备注更改为 OLE 对象,这似乎有效。当我查看 Access 中的数据时,它告诉我该字段是“长二进制数据”,并且在从 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)

这个对吗?

于 2013-04-29T19:15:12.050 回答