Vb.net 序列化/反序列化二维数组

Vb.net 序列化/反序列化二维数组,vb.net,winforms,visual-studio-2008,serialization,Vb.net,Winforms,Visual Studio 2008,Serialization,出于某种原因,我先前的问题被认为太模糊了。因此,让我更具体地说 我有一个单一类型的二维数组。 我想序列化它以保存在Access数据库中 建议将其保存为备注字段,这样就可以了。 我想稍后读取Memo字段并反序列化它以检索原始数组。 我在网上和这里进行了广泛的搜索,没有找到答案。我相信我正在正确序列化数组,但不知道如何反序列化它 此代码似乎适用于序列化,但我不知道如何反序列化: Dim f As New System.Runtime.Serialization.Formatters.Binary.B

出于某种原因,我先前的问题被认为太模糊了。因此,让我更具体地说

我有一个单一类型的二维数组。 我想序列化它以保存在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保存到Memo字段


请提供示例代码。

您可以通过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)
这可能看起来有点尴尬,但它在VS2010的控制台应用程序中经过了测试


功劳归谁。通过此链接,您还可以找到要使用的完整版本的代码。

我将访问字段的数据类型从“备注”更改为“OLE对象”,这似乎有效。当我查看Access中的数据时,它告诉我字段是“长二进制数据”,并且在从Access读取记录后,我能够使用以下代码:


Dim f作为新的System.Runtime.Serialization.Formatters.BinaryFormatter
Dim byArr作为字节()
byArr=DirectCast(dtLHS.Rows(0).Item(“LHS”),Byte())
将ArrayAsString设置为String=Convert.tobase64字符串(byArr)
将ms2调整为新内存流(转换.FromBase64String(ArrayaString))
Dim newLHS(,)as single=f.反序列化(ms2)


这是对的吗?

你之前的问题确实很模糊。穿这种衣服的人往往会因为缺少细节而皱眉。这个问题措辞得体+1我尝试了以下代码,但在无法将System.String类型的对象强制转换为System.Byte[]类型时出错。在以下代码中执行Convert.ToBase64String时会发生这种情况:Dim f As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Dim ms As New MemoryStream f.Serialize(ms,arLHS)Dim byArr As Byte()=ms.ToArraySorry,我粘贴了错误的代码。下面是正确的代码(并且.Item(“LHS”)保存为Access中的备注字段):Dim thearrayastring as String=Convert.ToBase64String(dtLHS.Rows(0).Item(“LHS”))Dim ms2 as New MemoryStream(Convert.FromBase64String(thearrayastring))Dim newLHS(,)as Single=f.Deserialize(ms2)@johnley:很遗憾,您无法在注释中格式化代码。所以请更新你原来的问题。您是否尝试了我提到的链接中的完整代码版本?在序列化值时,这可能与您的版本不一致,因为您必须使用匹配的序列化/反序列化方法。感谢您的回复。我以前在搜索解决方案时确实看到了该链接。您的是正确的,但我认为问题在于将序列化数据保存为备忘录,备忘录是一个不能转换为字节数组的字符串。当我在Access中将字段类型更改为OLEObject时,它似乎可以工作。谢谢你的时间和帮助@谢谢你的更新,我很高兴你能让它工作。别忘了接受和/或投票支持我的答案。在StackOverflow上,在答案中提问是很少见的。我理解这与问题直接相关,但请注意为其创建另一个问题。你也更可能通过这种方式得到答案。嗨,Neolik,我很感谢你对如何成为Stackoverflow的好成员的意见。我确实想遵守正确的礼仪。我问了一个新问题,因为我看不出如何格式化包含代码的评论回复。你能给我指一下如何做的说明吗?你最初的问题是如何对二维数组进行序列化/反序列化,我试图在回答中介绍这个问题。在您的案例中,它的数据库端是一个相关的问题,但通常是一个不同的问题。在每页的右上角使用
Ask Question
功能,并在其他问题中具体说明您的数据库类型问题。从你上面的帖子中,我不清楚这是正确的吗?指的是什么,所以请在你的新问题中详细说明。谢谢