您的位置:首页 > Web前端 > JavaScript

VB.NET 从XML文件中读取内容到JSON

2016-12-30 21:24 441 查看
摘要: 注:本文中记录的只是一些早年练手用的代码,用于JSON和XML简单转换,使用的是自己定义的一个“规则”,不保证转换的正确性

一、关于本文
本文承接了上一篇博客的内容。在上篇博客中,通过函数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 jobj

End Function

三、调用示例
Main代码
Sub Main()

Dim sJson As String = JsonXmlHelper.RecoverJsonFromXml("x.xml")
Console.WriteLine(sJson)

Console.ReadLine()

End Sub

四、运行结果



END

© 著作权归作者(北风其凉)所有
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: