標籤:des style blog http os strong 檔案 資料
一、關於本文
本文承接了上一篇部落格的內容。在上篇部落格中,通過函數WriteJsonToXml將一個JSON格式的檔案寫入了一個對應的XML檔案中。本文中則給出了函數RecoverJsonFromXml的代碼,可以將XML恢複成JSON格式的文本。
運行本文中代碼的環境與上篇部落格相同。
待讀取的XML文檔內容如下:
<?xml version="1.0" encoding="gb2312"?><!--這個XML文檔中儲存了一個JSON格式的資訊--><Root> <Name Type="String" Value="Tsybius" /> <Age Type="Integer" Value="23" /> <Sex_is_Male Type="Boolean" Value="True" /> <Partner Type="Object"> <Partner_Name Type="String" Value="Galatea" /> <Partner_Age Type="Integer" Value="21" /> <Partner_Sex_is_Male Type="Boolean" Value="False" /> </Partner> <Achievement Type="Array" Value0="ach1" Value1="ach2" Value2="ach3" /></Root>
二、函數RecoverJsonFromXml
這兩個函數被聲明在類JsonXmlHelper中
‘‘‘ <summary>‘‘‘ 將XML格式的內容儲存到JSON格式的字串中‘‘‘ </summary>‘‘‘ <param name="address">要讀取的XML檔案地址</param>‘‘‘ <remarks></remarks>Public Shared Function RecoverJsonFromXml(address As String) As String Dim xmlDoc = New XmlDocument xmlDoc.Load(address) Dim xmlRoot As XmlNode = xmlDoc.SelectSingleNode("Root") Dim jtemp As JObject = WriteToJson(xmlRoot) Return JsonConvert.SerializeObject(jtemp, Newtonsoft.Json.Formatting.Indented)End Function‘‘‘ <summary>‘‘‘ 中XmlNode類型中讀取一個JObject類型資料的資訊‘‘‘ </summary>‘‘‘ <param name="xNode">XML結點類型資料</param>‘‘‘ <returns>JObject類型資料</returns>‘‘‘ <remarks></remarks>Private Shared Function WriteToJson(xNode As XmlNode) As JObject Dim jobj As New JObject For Each obj As Object In xNode.ChildNodes If obj.GetType.ToString = "System.Xml.XmlElement" Then ‘讀取到XML結點 Dim xElmt As XmlElement = obj Select Case xElmt.GetAttribute("Type") Case "String" ‘字串型變數 jobj.Add(xElmt.Name, xElmt.GetAttribute("Value")) Case "Integer" ‘整型變數 jobj.Add(xElmt.Name, Integer.Parse(xElmt.GetAttribute("Value"))) Case "Float" ‘浮點型變數 jobj.Add(xElmt.Name, Double.Parse(xElmt.GetAttribute("Value"))) Case "Boolean" ‘布爾型變數 jobj.Add(xElmt.Name, IIf(xElmt.GetAttribute("Value") = "True", New JValue(True), New JValue(False))) Case "Array" ‘JSON數組 Dim jarr As JArray = New JArray() For i As Integer = 0 To xElmt.Attributes.Count - 2 jarr.Add(New JValue(xElmt.GetAttribute("Value" & i.ToString))) Next jobj.Add(xElmt.Name, jarr) Case "Object" ‘JSON對象 jobj.Add(xElmt.Name, WriteToJson(obj)) End Select ElseIf obj.GetType.ToString = "System.Xml.XmlComment" Then ‘讀取到注釋 Continue For Else ‘其他情況 Continue For End If Next Return jobjEnd Function
三、調用樣本
Main代碼
Sub Main() Dim sJson As String = JsonXmlHelper.RecoverJsonFromXml("x.xml") Console.WriteLine(sJson) Console.ReadLine()End Sub
四、運行結果
END