2

我正在尝试序列化我的 VB 解决方案中的主类。我在类的顶部添加了 Serializable 属性,如下所示:

<Serializable()>
Public Class Form1

我正在使用以下代码进行序列化:

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

当我调用此方法时,出现错误:

在程序集“System.Windows.Forms,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中键入“System.Windows.Forms.Form”未标记为可序列化。

我猜这是因为您无法序列化附加到类或其他东西的表单,但我真的不知道我在做什么。

我可以以某种方式序列化我的 Form1 类中包含的所有对象,而不会出现此错误吗?我不想存储有关表单控件的任何数据,我只需要保存我在Form1类顶部定义的所有对象。

谢谢你的帮助。

4

1 回答 1

3

由于Form不可序列化,您无法序列化表单本身。(表单未附加到您的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, 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、...)的类必须标记为<Serializable()>. 您可以在文档中检查这一点(例如:Hashtable被标记为可序列化)。
  • 确保以相同的顺序反序列化对象。
于 2011-04-05T08:39:35.497 回答