如何在vb.net中序列化表单?

如何在vb.net中序列化表单?

问题描述:

以下是序列化对象的代码。我需要这个序列化一个表单并将其保存在我的应用程序的配置中。如何在vb.net中序列化表单?

我已经设置断点,发现它返回Nothing或Null(3号线在下面的代码)

Public Function SerializeObject(ByVal o As Object) As String 
    If Not o.GetType().IsSerializable Then 
     Return Nothing 
    End If 

    Using stream As New MemoryStream() 
     Dim ser As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 
     ser.Serialize(stream, o) 
     MessageBox.Show(Convert.ToBase64String(stream.ToArray)) 
     Return Convert.ToBase64String(stream.ToArray) 
    End Using 
End Function 

如果有选择,我很想知道更多。

+0

可能的重复[是否有可能做一个对象的.NET二进制序列化,当你没有类的源代码?](http://*.com/问题/ 13166105 /的对象是-IT-可能对-DO网二进制序列化 - 的 - - 时 - 你 - 不要-have) – GSerg

+1

您应该将所需的元数据保存为*通常*创建一个表单实例。类似于表单名称,然后是任何所需的ctor参数。 – Plutonix

+0

忘记序列化整个表单。这没有意义。您可以将对您很重要的属性绑定到设置。这样,你加载每个表单,这些属性将从设置中加载。 –

.NET中的表单不是可序列化的,因为它们持有窗口的句柄。此句柄仅在此处有效(在此计算机上的此会话中),现在(如果您在十分钟内关闭该应用程序,句柄将不再有效)。

因此句柄不能被序列化,也不能形成。

的想法来解决这个解决办法是:

  • 你自己的序列化表单,选择要保存
  • 您创建了另一类是可序列化的价值观和类将创建表单时已被序列化...