日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
描述VB.NETfnSimpleObjectToXML

學(xué)習(xí)VB.NET時,你可能會遇到VB.NET fnSimpleObjectToXML問題,這里將介紹VB.NET fnSimpleObjectToXML問題的解決方法,在這里拿出來和大家分享一下。

專注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)大通免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

1、我將這個半自動初始化文件類命名為clsAPPOption,類內(nèi)結(jié)構(gòu)及包含過程的功能說明如下:

兩個區(qū)域#Region "應(yīng)用程序使用的選項結(jié)構(gòu)定義"、#Region "應(yīng)用程序選項的變量聲明"中的內(nèi)容是按初始化選項級組織的類及類的實例,每一個類表示程序選項的一個初始化節(jié),必須由最終使用者根據(jù)實際選項需要自行手工補(bǔ)充。
◆fnGetAppDirectory:取得應(yīng)用程序的運(yùn)行目錄
◆sbInitialDefaultAPPOption:設(shè)置程序選項的默認(rèn)初始值(這個過程中的代碼需根據(jù)實際需要手工修改)。
◆fnSaveAppOption:將類內(nèi)的程序選項保存到一個指定的文件中. (這個過程中的部分代碼需根據(jù)實際需要手工修改)
◆fnLoadAppOption:在指定的文件中讀取應(yīng)用程序的選項信息并保存到當(dāng)前類中(這個過程中的部分代碼需根據(jù)實際需要手工修改)。
◆fnXMLElementToSimpleObject:將一個XMLElement轉(zhuǎn)為它代表的簡單對象,所謂簡單對象就是諸如int32\int16之類的基本net對象。
◆fnXMLElementToClassObject:將一個XMLElement轉(zhuǎn)換為它代表的類對象。
◆fnXMLElementToArray:將一個XMLElement轉(zhuǎn)為它代表的數(shù)組。
◆fnArrayToXML:將一個數(shù)組放入XML文件中,目前只支持一維數(shù)組:例如dim aString(10) as string
◆fnClassObjectToXML:將一個類對象轉(zhuǎn)換為xml元素的表示形式。
◆VB.NET fnSimpleObjectToXML:將一個簡單對象改為XML元素表示
◆注:其中fnXMLElementToXXXX和fnXXXXToXML功能相對應(yīng),互為反函數(shù)。

2、程序的實現(xiàn)是非常簡單的,fnClassObjectToXML對指定的類進(jìn)行反射操作,使用類的類型的GetFields方法枚舉類內(nèi)的成員變量信息,然后根據(jù)成員變量的類型調(diào)用VB.NET fnSimpleObjectToXML或fnArrayToXML,在函數(shù)結(jié)束的時候,將要轉(zhuǎn)換的類以一個 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 如果是一個數(shù)組類型,則進(jìn)行數(shù)組方法的調(diào)用以取得值,  
  9. '目前只支持一維數(shù)組元素  
  10. tobjXMLElement = fnArrayToXML(tobjFieldInfo.GetValue(ni_objClassObject), 
    ni_objXMLDocument, tobjFieldInfo.Name, tobjFieldInfo.FieldType.FullName)  
  11. '將數(shù)組對象放入結(jié)構(gòu)的xml對象中  
  12. tobjXMLClassObjectElement.AppendChild(tobjXMLElement)  
  13. End If 

VB.NET fnSimpleObjectToXML的實現(xiàn)也很簡單,根據(jù)前文確立的簡單對象的定義,VB.NET fnSimpleObjectToXML過程所要生成的xml對象的幾個要素可以這樣獲?。篛bjectName在f nClassObjectToXML作反射后已經(jīng)獲取,并以參數(shù)傳遞的方式在調(diào)用VB.NET fnSimpleObjectToXML時提供了。 ObjectType數(shù)據(jù)類型則可以利用ni_objSimpleObject.GetType.FullName方法取得, ni_objSimpleObject就是在函數(shù)調(diào)用時傳入的簡單對象的值。

在編寫fnArrayToXML過程時出現(xiàn)了一點(diǎn)小問題,由于調(diào)用方不可能要求數(shù)組的元素逐個傳入,所以對數(shù)組的元素個數(shù)以及元素的值無法在函數(shù)中以對象反射的方式直接獲取。幸運(yùn)的是,在Net反射操作中,可以利用Invoke方法來調(diào)用原始對象內(nèi)的函數(shù)或?qū)傩赃^程,而數(shù)組的共享方法GetLength、GetValue功能適好是取數(shù)組元素個數(shù)及指定下標(biāo)的元素值,所以問題立刻迎刃而解。

 
 
 
  1. '利用反射調(diào)用數(shù)組的getLenght方法取得數(shù)組的大小,這里僅支持一維數(shù)組,但對于初始化文件已足夠用了  
  2. tobjXMLAttribute = ni_objXMLDocument.CreateAttribute("ArrayLength")  
  3. tobjMethodInfo = tobjArrayType.GetMethod("GetLength")  
  4. ReDim taobjParameter(0)  
  5. taobjParameter(0) = 0  
  6. ti32Tempa = tobjMethodInfo.Invoke(ni_objArray, taobjParameter)  
  7. tobjXMLAttribute.Value = ti32Tempa 
  8. tobjXMLElement.SetAttributeNode(tobjXMLAttribute)  
  9. tobjXMLAttribute = Nothing 
  10.  
  11. '加入數(shù)組的內(nèi)的元素  
  12. For ti32LoopA = 0 To ti32Tempa - 1  
  13.  
  14. '利用反射取得數(shù)組的GetValue方法取得實際元素的值  
  15. ReDim taobjParameterType(0)  
  16. taobjParameterType(0) = GetType(Integer)  
  17. tobjMethodInfo = tobjArrayType.GetMethod("GetValue", taobjParameterType)  
  18. ReDim taobjParameter(0)  
  19. taobjParameter(0) = ti32LoopA  
  20. tobjTempa = tobjMethodInfo.Invoke(ni_objArray, taobjParameter)  
  21. ' 將數(shù)組元素放入對xml對象中  
  22. tobjXMLElementA = fnSimpleObjectToXML(tobjTempa, ni_objXMLDocument, ti32LoopA)  
  23. tobjXMLElement.AppendChild(tobjXMLElementA)  
  24. Next ti32LoopA 

從XML轉(zhuǎn)為net對象的過程基本都沒有什么技術(shù)難度。我只是根據(jù)xml中包含的ObjectType信息簡單獲得簡單對象的類型,然后直接調(diào)用net強(qiáng)制轉(zhuǎn)換類的功能將XML文件中指定的對象儲存的數(shù)值重新恢復(fù)為原來的net對象。代碼如下:

 
 
 
  1. '根據(jù)XMLelement結(jié)構(gòu)元素中指定的對象類型,建立對象  
  2. tobjType = Type.GetType(tobjXmlSimpleObjectElement.GetAttribute("ObjectType"))  
  3. tobjReturnSimpleObject = Convert.ChangeType(tobjXmlSimpleObjectElement.InnerText, tobjType, Nothing) 

對于Xml轉(zhuǎn)為數(shù)組用數(shù)組、轉(zhuǎn)為類對象的方法可以參閱本文所附源代碼。

【編輯推薦】

  1. 描述VB.NET EIF體系
  2. 簡單講述VB.NET多重繼承
  3. 淺談VB.NET語言與.NET開發(fā)語言關(guān)系
  4. 講解VB.NET語言學(xué)習(xí)經(jīng)驗
  5. 淺析VB.NET語言到底帶來了什么

當(dāng)前文章:描述VB.NETfnSimpleObjectToXML
網(wǎng)站路徑:http://www.dlmjj.cn/article/dpohggh.html