VB.NET 将JSON格式的字符串保存到XML文件中

前端之家收集整理的这篇文章主要介绍了VB.NET 将JSON格式的字符串保存到XML文件中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.关于本文

这几天打算写一个工具类JsonXmlHelper,用来进行用XML来保存JSON格式文件的工作。该工具类中要实现2个最主要的函数

1)将JSON格式的内容写入到地址为address的XML中:WriteJsonToXml

2)把函数1中构造的XML文件恢复成JSON格式文档:RecoverJsonFromXml

函数1的实现将在本文中给出,函数2的实现将在下一篇博文中给出

2.代码说明

1)添加引用:Newtonsoft.Json.dll

2)导入库

'JSON解析相关函数,需要添加引用Newtonsoft.Json.dll
ImportsNewtonsoft.Json
ImportsNewtonsoft.Json.Linq
'XMl解析相关函数
ImportsSystem.Xml

3)在模块ModuleTest中建立类JsonXmlHelper

4)两个基础函数

WriteToFile(将一个字符串的内容写入到文件

ReadFromFile(从文件中读取内容赋值到一个字符串)

'''<summary>
'''将字符串中内容写入到文件
'''</summary>
'''<paramname="address">文件地址</param>
'''<paramname="content">被写入文件的字符串</param>
'''<remarks></remarks>
PublicSharedSubWriteToFile(addressAsString,contentAsString)
Try

DimswAsIO.StreamWriter
sw=NewIO.StreamWriter(address,False,System.Text.Encoding.UTF8)
sw.Write(content)
sw.Close()
sw.Dispose()
CatchexAsException
ThrowNewException(ex.Message)
EndTry
EndSub

'''<summary>
'''从文件中读取信息到字符串
'''</summary>
'''<paramname="address">文件地址</param>
'''<returns>读取到的字符串</returns>
'''<remarks></remarks>
PublicSharedFunctionReadFromFile(addressAsString)
Try
DimsrAsIO.StreamReader
sr=IO.File.OpenText(address)
Returnsr.ReadToEnd()
CatchexAsException
ThrowNewException(ex.Message)
EndTry
EndFunction

5)函数WriteJsonToXml的实现

'''<summary>
'''将JSON格式的内容写入到地址为address的XML中
'''</summary>
'''<paramname="address">要存入的文件地址</param>
'''<paramname="json">源JSON字符串</param>
'''<remarks></remarks>
PublicSharedSubWriteJsonToXml(addressAsString,jsonAsString)

'如果存在同名文件则先删除
IfIO.File.Exists(address)Then
IO.File.Delete(address)
EndIf

'建立XML文档

DimwriterAsXmlTextWriter=
NewXmlTextWriter(address,Text.Encoding.GetEncoding("GBK"))
writer.Formatting=Xml.Formatting.Indented

writer.WriteStartDocument()
writer.WriteComment("这个XML文档中存储了一个JSON格式的信息")

'递归遍历JSON中的项并写入到XML中
writer.WriteStartElement("Root")

'将JSON字符串中内容写入到XML文档
WriteToXml(writer,json)

writer.WriteEndElement()'Root结点结束

writer.WriteEndDocument()
writer.Close()

'XML文档创建结束

EndSub

'''<summary>
'''将一段JSON格式字符串写入到XML文件中
'''</summary>
'''<paramname="writer"></param>
'''<paramname="json"></param>
'''<remarks></remarks>
PrivateSharedSubWriteToXml(writerAsXmlTextWriter,jsonAsString)

DimjobjAsJObject=JObject.Parse(json)

'遍历读取到的JSON字符串
ForEachjtempAsJPropertyInjobj.Children

'根据读入的不同数据类型分类讨论
'Console.WriteLine(jtemp.Name.ToString&""&jtemp.Value.ToString)
SelectCasejtemp.Value.Type
CaseJTokenType.Object

writer.WriteStartElement(jtemp.Name.ToString(),"")
writer.WriteAttributeString("Type","Object")
WriteToXml(writer,jtemp.Value.ToString)
writer.WriteEndElement()

CaseJTokenType.Array

writer.WriteStartElement(jtemp.Name.ToString(),"Array")
'遍历数组读取值
ForiAsInteger=0Tojtemp.Value.Count-1
writer.WriteAttributeString("Value"&i,jtemp.Value(i).ToString)
Next
writer.WriteEndElement()

CaseJTokenType.String

writer.WriteStartElement(jtemp.Name.ToString(),"String")
writer.WriteAttributeString("Value",jtemp.Value.ToString)
writer.WriteEndElement()

CaseJTokenType.Boolean

writer.WriteStartElement(jtemp.Name.ToString(),"Boolean")
writer.WriteAttributeString("Value",jtemp.Value.ToString)
writer.WriteEndElement()

CaseJTokenType.Integer

writer.WriteStartElement(jtemp.Name.ToString(),"Integer")
writer.WriteAttributeString("Value",jtemp.Value.ToString)
writer.WriteEndElement()

CaseJTokenType.Float

writer.WriteStartElement(jtemp.Name.ToString(),"Float")
writer.WriteAttributeString("Value",jtemp.Value.ToString)
writer.WriteEndElement()

CaseJTokenType.Null

writer.WriteStartElement(jtemp.Name.ToString(),"Null")
writer.WriteAttributeString("Value",jtemp.Value.ToString)
writer.WriteEndElement()

CaseElse
EndSelect

Next

EndSub

3.上面若干函数调用示例

1)建立结构Person

PublicClassPerson
PublicNameAsString'姓名
PublicAgeAsInteger'年龄
PublicSex_is_MaleAsBoolean'性别
PublicStructurePartnerInfo'伙伴信息结构
PublicPartner_NameAsString'伙伴姓名
PublicPartner_AgeAsInteger'伙伴年龄
PublicPartner_Sex_is_MaleAsBoolean'伙伴性别
EndStructure
PublicPartnerAsPartnerInfo'伙伴
PublicAchievementAsString()
'''<summary>
'''构造函数
'''</summary>
'''<paramname="isDefault">true:使用默认值,false:使用测试值</param>
'''<remarks></remarks>
PublicSubNew(OptionalByValisDefaultAsBoolean=True)
Me.Name=IIf(isDefault,"","Tsybius")
Me.Age=IIf(isDefault,23)
Me.Sex_is_Male=IIf(isDefault,True,True)
Me.Partner.Partner_Name=IIf(isDefault,"Galatea")
Me.Partner.Partner_Age=IIf(isDefault,21)
Me.Partner.Partner_Sex_is_Male=IIf(isDefault,False)
Me.Achievement=IIf(isDefault,NewString(){},NewString(){"ach1","ach2","ach3"})
EndSub
EndClass

2)在Main函数调用本文中的函数

SubMain()

'将测试内容写入到文件test.txt中
JsonXmlHelper.WriteToFile("test.txt","这是一段测试内容")
'从文件test.txt中读入内容
Console.WriteLine(JsonXmlHelper.ReadFromFile("test.txt"))
Console.WriteLine()

'建立Person结构实例
DimpAsPerson=NewPerson(False)

'将Person类型实例存储到json格式的字符串中(两种格式:不缩进、缩进)
Dimjson1AsString=
JsonConvert.SerializeObject(p,Newtonsoft.Json.Formatting.None)
Dimjson2AsString=
JsonConvert.SerializeObject(p,Newtonsoft.Json.Formatting.Indented)

'输出生成的字符串
Console.WriteLine(json1&vbCrLf&vbCrLf&json2)

JsonXmlHelper.WriteJsonToXml("x.xml",json1)

Console.ReadLine()

EndSub

3)运行结果

控制台输出结果

生成的x.xml内容

<?xmlversion="1.0"encoding="gb2312"?>
<!--这个XML文档中存储了一个JSON格式的信息-->
<Root>
<NameType="String"Value="Tsybius"/>
<AgeType="Integer"Value="23"/>
<Sex_is_MaleType="Boolean"Value="True"/>
<PartnerType="Object">
<Partner_NameType="String"Value="Galatea"/>
<Partner_AgeType="Integer"Value="21"/>
<Partner_Sex_is_MaleType="Boolean"Value="False"/>
</Partner>
<AchievementType="Array"Value0="ach1"Value1="ach2"Value2="ach3"/>
</Root>

END

猜你在找的VB相关文章