文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

VB.NET中fnSimpleObjectToXML怎么用

2023-06-17 20:46

关注

这篇文章主要为大家展示了“VB.NET中fnSimpleObjectToXML怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET中fnSimpleObjectToXML怎么用”这篇文章吧。

我将这个半自动初始化文件类命名为clsAPPOption,类内结构及包含过程的功能说明如下:

两个区域#Region "应用程序使用的选项结构定义"、#Region "应用程序选项的变量声明"中的内容是按初始化选项级组织的类及类的实例,每一个类表示程序选项的一个初始化节,必须由最终使用者根据实际选项需要自行手工补充。
◆fnGetAppDirectory:取得应用程序的运行目录
◆sbInitialDefaultAPPOption:设置程序选项的默认初始值(这个过程中的代码需根据实际需要手工修改)。
◆fnSaveAppOption:将类内的程序选项保存到一个指定的文件中. (这个过程中的部分代码需根据实际需要手工修改)
◆fnLoadAppOption:在指定的文件中读取应用程序的选项信息并保存到当前类中(这个过程中的部分代码需根据实际需要手工修改)。
◆fnXMLElementToSimpleObject:将一个XMLElement转为它代表的简单对象,所谓简单对象就是诸如int32\int16之类的基本net对象。
◆fnXMLElementToClassObject:将一个XMLElement转换为它代表的类对象。
◆fnXMLElementToArray:将一个XMLElement转为它代表的数组。
◆fnArrayToXML:将一个数组放入XML文件中,目前只支持一维数组:例如dim aString(10) as string
◆fnClassObjectToXML:将一个类对象转换为xml元素的表示形式。
◆VB.NET fnSimpleObjectToXML:将一个简单对象改为XML元素表示
◆注:其中fnXMLElementToXXXX和fnXXXXToXML功能相对应,互为反函数。

程序的实现是非常简单的,fnClassObjectToXML对指定的类进行反射操作,使用类的类型的GetFields方法枚举类内的成员变量信息,然后根据成员变量的类型调用VB.NET fnSimpleObjectToXML或fnArrayToXML,在函数结束的时候,将要转换的类以一个 XMLElement对象的形式返回。

  1. For Each tobjFieldInfo In tobjClassObjectType.GetFields  

  2. If tobjFieldInfo.FieldType.IsArray = False Then '只是一个简单类型,直接取得值  

  3. tobjXMLElement = fnSimpleObjectToXML(tobjFieldInfo.GetValue(ni_objClassObject), _  

  4. ni_objXMLDocument, _  

  5. tobjFieldInfo.Name)  

  6. tobjXMLClassObjectElement.AppendChild(tobjXMLElement)  

  7. Else  

  8. REM 如果是一个数组类型,则进行数组方法的调用以取得值,  

  9. '目前只支持一维数组元素  

  10. tobjXMLElement = fnArrayToXML(tobjFieldInfo.GetValue(ni_objClassObject), 
    ni_objXMLDocument, tobjFieldInfo.Name, tobjFieldInfo.FieldType.FullName)  

  11. '将数组对象放入结构的xml对象中  

  12. tobjXMLClassObjectElement.AppendChild(tobjXMLElement)  

  13. End If 

VB.NET fnSimpleObjectToXML的实现也很简单,根据前文确立的简单对象的定义,VB.NET fnSimpleObjectToXML过程所要生成的xml对象的几个要素可以这样获取:ObjectName在f nClassObjectToXML作反射后已经获取,并以参数传递的方式在调用VB.NET fnSimpleObjectToXML时提供了。 ObjectType数据类型则可以利用ni_objSimpleObject.GetType.FullName方法取得, ni_objSimpleObject就是在函数调用时传入的简单对象的值。

在编写fnArrayToXML过程时出现了一点小问题,由于调用方不可能要求数组的元素逐个传入,所以对数组的元素个数以及元素的值无法在函数中以对象反射的方式直接获取。幸运的是,在Net反射操作中,可以利用Invoke方法来调用原始对象内的函数或属性过程,而数组的共享方法GetLength、GetValue功能适好是取数组元素个数及指定下标的元素值,所以问题立刻迎刃而解。

'利用反射调用数组的getLenght方法取得数组的大小,这里仅支持一维数组,但对于初始化文件已足够用了  tobjXMLAttribute = ni_objXMLDocument.CreateAttribute("ArrayLength")  tobjMethodInfo = tobjArrayType.GetMethod("GetLength")  ReDim taobjParameter(0)  taobjParameter(0) = 0  ti32Tempa = tobjMethodInfo.Invoke(ni_objArray, taobjParameter)  tobjXMLAttribute.Value = ti32Tempa tobjXMLElement.SetAttributeNode(tobjXMLAttribute)  tobjXMLAttribute = Nothing  '加入数组的内的元素  For ti32LoopA = 0 To ti32Tempa - 1   '利用反射取得数组的GetValue方法取得实际元素的值  ReDim taobjParameterType(0)  taobjParameterType(0) = GetType(Integer)  tobjMethodInfo = tobjArrayType.GetMethod("GetValue", taobjParameterType)  ReDim taobjParameter(0)  taobjParameter(0) = ti32LoopA  tobjTempa = tobjMethodInfo.Invoke(ni_objArray, taobjParameter)  ' 将数组元素放入对xml对象中  tobjXMLElementA = fnSimpleObjectToXML(tobjTempa, ni_objXMLDocument, ti32LoopA)  tobjXMLElement.AppendChild(tobjXMLElementA)  Next ti32LoopA

从XML转为net对象的过程基本都没有什么技术难度。我只是根据xml中包含的ObjectType信息简单获得简单对象的类型,然后直接调用net强制转换类的功能将XML文件中指定的对象储存的数值重新恢复为原来的net对象。代码如下:

'根据XMLelement结构元素中指定的对象类型,建立对象  tobjType = Type.GetType(tobjXmlSimpleObjectElement.GetAttribute("ObjectType"))  tobjReturnSimpleObject = Convert.ChangeType(tobjXmlSimpleObjectElement.InnerText, tobjType, Nothing)

以上是“VB.NET中fnSimpleObjectToXML怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯