2010-04-14 26 views
1

我需要看看一個對象的屬性,我不能在我的開發機器上以適當的狀態實例化這個對象。我需要我的客戶端在她的機器上運行一些代碼,將有問題的對象序列化到磁盤,然後我可以分析該文件。我們如何序列化一個不是我們自己的自定義類的類?

這是我想要序列化的類。

System.Security.AccessControl.RegistrySecurity

這裏是我的代碼:

Private Sub SerializeRegSecurity(ByVal regKey As RegistryKey) 

    Try 

     Dim regSecurity As System.Security.AccessControl.RegistrySecurity = regKey.GetAccessControl() 

     Dim oXS As XmlSerializer = New XmlSerializer(GetType(System.Security.AccessControl.RegistrySecurity)) 
     Dim oStmW As StreamWriter 

     Dim regDebugFilePath As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "RegDebugFile.xml") 
     'Serialize object to XML and write it to XML file 
     oStmW = New StreamWriter(regDebugFilePath) 
     oXS.Serialize(oStmW, regSecurity) 
     oStmW.Close() 

    Catch ex As Exception 
     Console.WriteLine(ex.ToString) 
    End Try 

End Sub 

這裏就是我在XML文件中結束:

<?xml version="1.0" encoding="utf-8"?> 

任何關於如何完成我想要做的事情的想法?我們如何序列化一個不是我們自己的自定義類的類?

感謝您的任何幫助。即使是一種替代方法。

+0

我想我會放棄這個問題。我不知道如何處理這個不屬於我的課程。 – Doug 2010-04-19 15:04:33

回答

2

你有幾種選擇。這裏有三個主要的:

你可以爲你想要序列化的類編寫一個包裝類,然後序列化和反序列化包裝器。在反序列化中,包裝器將需要從其自己的數據重新構建序列化對象,並且您需要從包裝器中提取重構對象。

另一種選擇是實施Serialization Surrogate。您需要手動配置GetObjectData和SetObjectData方法,這些方法控制數據如何進出序列化對象。

如果您希望序列化的類是可繼承的,並且您可以使用子類而不是原始類,則可以創建一個實現ISerializable的子類。與序列化代理一樣,您必須自己處理GetObjectData

+0

這些選項看起來很有希望。但我沒有想法如何開始實施這些。你有任何可能讓我開始的代碼示例的鏈接?謝謝!同時,我將開始使用谷歌搜索來查看是否可以找到一些樣本來讓我去。 – Doug 2010-04-14 17:50:04

+0

也許這MSDN文章將有所幫助:http://msdn.microsoft.com/en-us/magazine/cc188950.aspx 此外,請檢查我的上述文章中的GetObjectData鏈接示例代碼 – 2010-04-14 17:51:41

0

您可以嘗試使用BinaryFormatterSerialize方法。這會將對象圖形序列化爲一個流,然後您可以根據需要堅持。

+0

謝謝,我嘗試使用BinaryFormatter的Serialize方法,但我得到一個異常,指出System.Security.AccessControl.RegistrySecurity未標記爲可序列化。 – Doug 2010-04-14 16:57:52

相關問題