VB/VBA中的XML反序列化

oha*_*rab 5 xml vb6 serialization vba xml-deserialization

我在MS Access数据库中有一组VBA类.我有一个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
Run Code Online (Sandbox Code Playgroud)

但这似乎不适用于标准类模块.我收到429错误:

ActiveX Component Cannot Be Created
Run Code Online (Sandbox Code Playgroud)

其他人可以帮帮我吗?如果我可以提供帮助,我宁愿不必手动设置每个属性,这些类中的一些是巨大的!

Ale*_* K. 3

您永远不会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
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以替换InvokeHook为。CallByName