Десериализация XML в VB / VBA - PullRequest
       19

Десериализация XML в VB / VBA

5 голосов
/ 27 апреля 2010

У меня есть набор классов VBA в базе данных MS Access. У меня есть строка XML с данными, с которыми я хочу создать новые классы.

Кроме простого задания каждого свойства, есть ли простой способ десериализации XML в моем объекте?

Я видел код с использованием библиотеки TypeLib

Public Sub ISerializable_Deserialize(xml As IXMLDOMNode)

  Dim tTLI As TLIApplication
  Dim tInvoke As InvokeKinds
  Dim tName As String
  Dim tMem As MemberInfo

  tInvoke = VbLet

  For Each tMem In TLI.ClassInfoFromObject(Me).Members

     tName = LCase(tMem.Name)

     CallByName Me, tMem.Name, VbLet, xml.Attributes.getNamedItem(tName).Text

  Next tMem
End Sub

но это не похоже на работу со стандартными модулями класса. Я получаю 429 ошибку:

ActiveX Component Cannot Be Created

Может ли кто-нибудь еще помочь мне? Я бы предпочел не устанавливать каждое свойство вручную, если я могу помочь, некоторые из этих классов огромны!

1 Ответ

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

Вы никогда не вписываете tTLI в этот код &, а затем ссылаетесь на него как на TLI, поэтому он не будет работать, ошибка 429 может быть из-за того, что библиотека TypeInfo не зарегистрирована, вы добавили ее в качестве ссылки?

Если вы сделали следующее, будет работать:

Dim TLI As TLIApplication
Dim II As InterfaceInfo
Dim MI As MemberInfo

Set TLI = New TLIApplication
Set II = TLI.InterfaceInfoFromObject(Me)

For Each MI In II.Members
    If MI.InvokeKind = InvokeKinds.INVOKE_PROPERTYPUT Then
        Debug.Print MI.Name
        TLI.InvokeHook Me, MI.Name, InvokeKinds.INVOKE_PROPERTYPUT, "PROPVALUE"
    End If
Next

Вы можете заменить InvokeHook на CallByName, если хотите.

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