代码之家  ›  专栏  ›  技术社区  ›  Doug

如何序列化不是我们自己的自定义类的类?

  •  1
  • Doug  · 技术社区  · 14 年前

    我需要查看一个对象的属性,我不能在我的开发机器上以正确的状态实例化这个对象。我需要我的客户机在她的机器上运行一些代码,将有问题的对象序列化到磁盘,然后我可以分析文件。

    这是我要序列化的类。

    system.security.accesscontrol.registrysecurity系统.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 回复  |  直到 14 年前
        1
  •  2
  •   M.A. Hanin    14 年前

    你有几个选择。以下是三大要点:

    你可以写一个 包装类 对于要序列化的类,然后序列化和反序列化包装器。在反序列化时,包装器需要从它自己的数据中重新构造序列化对象,并且需要从包装器中提取重构对象。

    另一个选择是实现 Serialization Surrogate . 您需要手动配置getobjectdata和setobjectdata方法,这些方法控制数据如何进入和离开序列化对象。

    如果要序列化的类是可继承的,并且可以使用 子类 您可以创建一个decentant类来实现 ISerializable . 与序列化代理项一样,您必须处理 GetObjectData 你自己。

        2
  •  0
  •   stuartd saeed    14 年前

    你可以尝试使用 BinaryFormatter Serialize 方法。这将把对象图序列化为流,然后可以根据需要持久化。