VB.NET序列化错误
我试图在我的VB解决方案中序列化主类。我在类的顶部添加了Serializable属性,如下所示:VB.NET序列化错误,vb.net,winforms,visual-studio-2010,serialization,binary-serialization,Vb.net,Winforms,Visual Studio 2010,Serialization,Binary Serialization,我试图在我的VB解决方案中序列化主类。我在类的顶部添加了Serializable属性,如下所示: <Serializable()> Public Class Form1 当我调用此方法时,我得到一个错误: 在程序集System.Windows.Forms中键入“System.Windows.Forms.Form”, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089' 未标记为可序列化 我猜这是因为您无法序列化附加到类或其他对象的表单
<Serializable()>
Public Class Form1
当我调用此方法时,我得到一个错误:
在程序集System.Windows.Forms中键入“System.Windows.Forms.Form”,
版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089'
未标记为可序列化
我猜这是因为您无法序列化附加到类或其他对象的表单,但我真的不知道我在做什么
我能否以某种方式序列化Form1类中包含的所有对象而不出现此错误?我不想存储任何关于表单控件的数据,我只需要保存我在Form1
类顶部定义的所有对象
谢谢您的帮助。由于
表单
不可序列化,因此无法序列化表单本身。(表单未附加到Form1
类。您的Form1
类就是表单,因为它派生自System.Windows.Forms.form
)
但是,您可以只序列化要序列化的对象:
Public Sub serializeThis()
Dim fStream As FileStream
Try
fStream = New FileStream("C:\ObjectData.bin", FileMode.Create)
Dim bfmtr As New BinaryFormatter
bfmtr.Serialize(fStream, Me)
fStream.Close()
Catch ex As Exception
MsgBox("Failed to serialize: " & ex.Message)
Throw
End Try
End Sub
Public Sub SerializeThis()
Dim fStream As FileStream
Try
fStream = New FileStream("C:\ObjectData.bin", FileMode.Create)
Dim bfmtr As New BinaryFormatter()
bfmtr.Serialize(fStream, object1)
bfmtr.Serialize(fStream, object2)
bfmtr.Serialize(fStream, object3)
' ...
fStream.Close()
Catch ex As Exception
MsgBox("Failed to serialize: " & ex.Message)
Throw
End Try
End Sub
有两件事需要注意:
- 要序列化的所有对象(object1、object2等)的类必须标记为
。您可以在文档中对此进行检查(例如:标记为可序列化) - 确保以相同的顺序反序列化对象
。将用户界面(Form1)和数据(新类)分开是一种很好的做法。@Andrew:您需要按相同的顺序对它们进行反序列化,因为您的文件流将包含bytesForObject1 bytesForObject2…
,并且用bytesForObject1
重建object2将不起作用。;-)