您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“VB.NET中fnSimpleObjectToXML怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“VB.NET中fnSimpleObjectToXML怎么用”這篇文章吧。
1、我將這個半自動初始化文件類命名為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功能相對應,互為反函數。
2、程序的實現是非常簡單的,fnClassObjectToXML對指定的類進行反射操作,使用類的類型的GetFields方法枚舉類內的成員變量信息,然后根據成員變量的類型調用VB.NET fnSimpleObjectToXML或fnArrayToXML,在函數結束的時候,將要轉換的類以一個 XMLElement對象的形式返回。
For Each tobjFieldInfo In tobjClassObjectType.GetFields
If tobjFieldInfo.FieldType.IsArray = False Then '只是一個簡單類型,直接取得值
tobjXMLElement = fnSimpleObjectToXML(tobjFieldInfo.GetValue(ni_objClassObject), _
ni_objXMLDocument, _
tobjFieldInfo.Name)
tobjXMLClassObjectElement.AppendChild(tobjXMLElement)
Else
REM 如果是一個數組類型,則進行數組方法的調用以取得值,
'目前只支持一維數組元素
tobjXMLElement = fnArrayToXML(tobjFieldInfo.GetValue(ni_objClassObject),
ni_objXMLDocument, tobjFieldInfo.Name, tobjFieldInfo.FieldType.FullName)'將數組對象放入結構的xml對象中
tobjXMLClassObjectElement.AppendChild(tobjXMLElement)
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怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。