微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB / VBA中的XML反序列化

我在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

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

ActiveX Component Cannot Be Created

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

解决方法

你永远不会在该代码中实例化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

如果愿意,可以用CallByName替换InvokeHook.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐