2016-07-28 36 views
0

以下是序列化對象的代碼。我需要這個序列化一個表單並將其保存在我的應用程序的配置中。如何在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://stackoverflow.com/問題/ 13166105 /的對象是-IT-可能對-DO網二進制序列化 - 的 - - 時 - 你 - 不要-have) – GSerg

+1

您應該將所需的元數據保存爲*通常*創建一個表單實例。類似於表單名稱,然後是任何所需的ctor參數。 – Plutonix

+0

忘記序列化整個表單。這沒有意義。您可以將對您很重要的屬性綁定到設置。這樣,你加載每個表單,這些屬性將從設置中加載。 –

回答

1

.NET中的表單不是可序列化的,因爲它們持有窗口的句柄。此句柄僅在此處有效(在此計算機上的此會話中),現在(如果您在十分鐘內關閉該應用程序,句柄將不再有效)。

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

的想法來解決這個解決辦法是:

  • 你自己的序列化表單,選擇要保存
  • 您創建了另一類是可序列化的價值觀和類將創建表單時已被序列化...