我们如何序列化一个不属于我们自定义类的类?

时间:2010-04-14 15:49:15

标签: vb.net serialization

我需要查看对象的属性,并且我无法在dev机器上以适当的状态实例化此对象。我需要我的客户端在她的机器上运行一些代码,将有问题的对象序列化到磁盘然后我可以分析该文件。

这是我要序列化的类。

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"?>

关于如何完成我想要做的事情的任何想法?我们如何序列化一个不属于我们自定义类的类?

感谢您的帮助。甚至是另一种方法。

2 个答案:

答案 0 :(得分:2)

您有几种选择。以下是三个主要的:

您可以为要序列化的类编写包装类,然后对包装器进行序列化和反序列化。在反序列化时,包装器需要从其自己的数据重新构造序列化对象,并且您需要从包装器中提取重构对象。

另一种选择是实施Serialization Surrogate。您需要手动配置GetObjectData和SetObjectData方法,这些方法控制数据进出序列化对象的方式。

如果您要序列化的类是可继承的,并且您可以使用子类而不是原始类,则可以创建一个实现ISerializable的后代类。与序列化代理一样,您必须自己处理GetObjectData

答案 1 :(得分:0)

您可以尝试使用BinaryFormatterSerialize方法。这会将对象图序列化为流,然后您可以根据需要保留该流。