2013-04-29 84 views
7

由于某种原因,我之前的问题被认为太含糊。所以让我更具体。我有一个单维数组的2维数组。 我想序列化它以保存在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保存到备注字段。

请提供示例代码。

+0

你以前的问题确实比较模糊。 SO上的人往往因缺乏细节而皱眉。这个问题很好。 +1 – Neolisk 2013-04-29 18:09:35

回答

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。通过这个链接,你也可以找到完整版本的代码来玩。

+0

我试过下面的代码,但得到一个错误无法将System.String类型的对象转换为类型System.Byte []在以下代码中执行Convert.ToBase64String时发生这种情况:Dim f As New System.Runtime.Serialization。 Formatters.Binary.BinaryFormatter 昏暗毫秒作为新的MemoryStream f.Serialize(MS,arLHS) 昏暗byArr为字节()= ms.ToArray – 2013-04-29 18:48:04

+0

有人能告诉我如何答复格式化? – 2013-04-29 18:48:40

+0

对不起,我粘贴了错误的代码。这是正确的代码(和.Item(“LHS”)被保存为备注字段在Access中):Dim theArrayAsString As String = Convert.ToBase64String(dtLHS.Rows(0).Item(“LHS”)) Dim ms2 As新的MemoryStream(Convert.FromBase64String(theArrayAsString)) Dim newLHS(,)As Single = f.Deserialize(ms2) – 2013-04-29 18:56:30

0

我将Access字段的数据类型从备忘录更改为OLE对象,似乎工作。当我访问的数据看它告诉我的领域是“长二进制数据”,我能够从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)

这是正确的吗?

+0

在StackOverflow上,在答案中提问非常少见。我知道这与问题直接相关,但请注意为此创建另一个问题。你更有可能以这种方式得到答案。 – Neolisk 2013-04-29 19:48:35

+0

嗨Neolisk,我感谢你如何成为Stackoverflow的一员。我确实想遵循正确的礼节。我问了一个新问题,因为我看不到如何格式化包含代码的评论回复。你能指点我怎么做的吗? – 2013-04-29 20:18:49

+0

你原来的问题是如何'序列化/反序列化二维数组',我试图在我的答案中涵盖。它的数据库端与你的情况相关,但通常是一个不同的问题。使用每个页面右上角的Ask Question功能,并在其他问题中具体说明您的数据库类型问题。从你上面的帖子中,我不清楚“这是正确的吗?”是指的,所以请在你的新问题中详细说明。谢谢! – Neolisk 2013-04-29 20:34:55