出于某种原因,我之前的问题被认为过于模糊。所以让我更具体一点。
我有一个单一类型的二维数组。 我想序列化它以保存在Access数据库中。
建议将其保存为备注字段,这很好。 我想稍后读取Memo字段并反序列化以检索原始数组。 我在网上广泛搜索过,但在这里找不到答案。我相信我正确地序列化数组但不知道如何反序列化它。
此代码似乎适用于序列化,但我无法弄清楚如何反序列化:
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保存到备注字段。
请提供示例代码。
答案 0 :(得分: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的控制台应用中进行了测试。
积分here。通过此链接,您还可以找到要使用的完整版代码。
答案 1 :(得分:0)
我将Access字段的数据类型从Memo更改为OLE Object,这似乎有效。当我查看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)
这是对的吗?