Как мы можем сериализовать класс, который не является нашим собственным классом? - PullRequest
1 голос
/ 14 апреля 2010

Мне нужно посмотреть на свойства объекта, и я не могу создать экземпляр этого объекта в надлежащем состоянии на моей машине разработчика. Мне нужно, чтобы мой клиент запустил некоторый код на своей машине, сериализовал рассматриваемый объект на диск и затем я смог проанализировать файл.

Вот класс, который я хочу сериализовать.

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 ]

2 голосов
/ 14 апреля 2010

У вас есть несколько вариантов. Вот три основных из них:

Вы можете написать класс оболочки для класса, который вы хотите сериализовать, затем сериализовать и десериализовать оболочку. При десериализации оболочка должна будет реконструировать сериализованный объект из своих собственных данных, и вам нужно будет извлечь восстановленный объект из оболочки.

Другим вариантом является реализация Сериализация суррогата . Вам нужно будет вручную настроить методы GetObjectData и SetObjectData, которые управляют тем, как данные поступают в сериализованный объект и выходят из него.

Если класс, который вы хотите сериализовать, является наследуемым, и вы можете работать с подклассом вместо оригинала, вы можете создать класс-потомок, который реализует ISerializable . Как и в случае суррогата сериализации, вам придется иметь дело с GetObjectData самостоятельно.

0 голосов
/ 14 апреля 2010

Вы можете попробовать использовать метод BinaryFormatter Serialize . Это позволит сериализовать граф объектов в поток, который затем можно сохранить при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...