加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB / VBA中的XML反序列化

发布时间:2020-12-17 07:28:05 所属栏目:百科 来源:网络整理
导读:我在MS Access数据库中有一组VBA类. 我有一个xml字符串,其中包含我想要创建新类的数据. 除了单独设置每个属性之外,还有一种简单的方法可以将XML反序列化为我的对象吗? 我已经看到使用TypeLib库的代码 Public Sub ISerializable_Deserialize(xml As IXMLDOMN
我在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读