VB.NET 将JSON格式的字符串保存到XML文件中
发布时间:2020-12-17 07:54:19 所属栏目:百科 来源:网络整理
导读:1.关于本文 这几天打算写一个工具类JsonXmlHelper,用来进行用XML来保存JSON格式文件的工作。该工具类中要实现2个最主要的函数: 1)将JSON格式的内容写入到地址为address的XML中:WriteJsonToXml 2)把函数1中构造的XML文件恢复成JSON格式文档:RecoverJson
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |