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

У меня есть ряд классов VBA в базе данных Access MS. У меня есть строка 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

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

5
задан oharab 27 April 2010 в 09:21
поделиться

1 ответ

Вы никогда не используете 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 , если хотите.

3
ответ дан 15 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: