Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 我们如何序列化一个不是我们自己的自定义类的类?_Vb.net_Serialization - Fatal编程技术网

Vb.net 我们如何序列化一个不是我们自己的自定义类的类?

Vb.net 我们如何序列化一个不是我们自己的自定义类的类?,vb.net,serialization,Vb.net,Serialization,我需要查看一个对象的属性,但我无法在我的开发机器上以正确的状态实例化这个对象。我需要我的客户机在她的机器上运行一些代码,将有问题的对象序列化到磁盘,然后我可以分析文件 这是我想要序列化的类 System.Security.AccessControl.RegistrySecurity 这是我的密码: Private Sub SerializeRegSecurity(ByVal regKey As RegistryKey) Try Dim regSecurity

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

这是我想要序列化的类

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

关于如何完成我想做的事情有什么想法吗?我们如何序列化一个不是我们自己的自定义类的类


谢谢你的帮助。甚至还有另一种方法。

您可以尝试使用的方法。这将把对象图序列化为一个流,然后您可以根据需要持久化该流。

您有几个选项。以下是三个主要问题:

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

另一个选择是实现一个。您需要手动配置GetObjectData和SetObjectData方法,它们控制数据如何进出序列化对象


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

谢谢,我尝试使用BinaryFormatter的Serialize方法,但我得到一个异常,该异常表示System.Security.AccessControl.RegistrySecurity未标记为可序列化。这些选项看起来很有希望。但我不知道如何开始实施这些措施。你有任何代码示例的链接可以让我开始吗?谢谢同时,我会开始用谷歌搜索,看看是否能找到一些样本来帮助我。也许这篇MSDN文章会有所帮助:也可以查看我上面帖子中GetObjectData链接的样本代码,我想我会放弃这个问题。我不知道如何在一个不是我的类上处理这个问题。