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
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
‘XMl解析相关函数
Imports System.Xml

3)在模块ModuleTest中建立类JsonXmlHelper

4)两个基础函数:

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

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

‘‘‘ <summary>
‘‘‘ 将字符串中内容写入到文件
‘‘‘ </summary>
‘‘‘ <param name="address">文件地址</param>
‘‘‘ <param name="content">被写入文件的字符串</param>
‘‘‘ <remarks></remarks>
Public Shared Sub WriteToFile(address As String, content As String)
    Try

        Dim sw As IO.StreamWriter
        sw = New IO.StreamWriter(address, False, System.Text.Encoding.UTF8)
        sw.Write(content)
        sw.Close()
        sw.Dispose()
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
End Sub

‘‘‘ <summary>
‘‘‘ 从文件中读取信息到字符串
‘‘‘ </summary>
‘‘‘ <param name="address">文件地址</param>
‘‘‘ <returns>读取到的字符串</returns>
‘‘‘ <remarks></remarks>
Public Shared Function ReadFromFile(address As String)
    Try
        Dim sr As IO.StreamReader
        sr = IO.File.OpenText(address)
        Return sr.ReadToEnd()
    Catch ex As Exception
        Throw New Exception(ex.Message)
    End Try
End Function

5)函数WriteJsonToXml的实现

‘‘‘ <summary>
‘‘‘ 将JSON格式的内容写入到地址为address的XML中
‘‘‘ </summary>
‘‘‘ <param name="address">要存入的文件地址</param>
‘‘‘ <param name="json">源JSON字符串</param>
‘‘‘ <remarks></remarks>
Public Shared Sub WriteJsonToXml(address As String, json As String)

    ‘如果存在同名文件则先删除
    If IO.File.Exists(address) Then
        IO.File.Delete(address)
    End If

    ‘建立XML文档

    Dim writer As XmlTextWriter =
        New XmlTextWriter(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文档创建结束

End Sub

‘‘‘ <summary>
‘‘‘ 将一段JSON格式字符串写入到XML文件中
‘‘‘ </summary>
‘‘‘ <param name="writer"></param>
‘‘‘ <param name="json"></param>
‘‘‘ <remarks></remarks>
Private Shared Sub WriteToXml(writer As XmlTextWriter, json As String)

    Dim jobj As JObject = JObject.Parse(json)

    ‘遍历读取到的JSON字符串
    For Each jtemp As JProperty In jobj.Children

        ‘根据读入的不同数据类型分类讨论
        ‘Console.WriteLine(jtemp.Name.ToString & " " & jtemp.Value.ToString)
        Select Case jtemp.Value.Type
            Case JTokenType.Object

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

            Case JTokenType.Array

                writer.WriteStartElement(jtemp.Name.ToString(), "")
                writer.WriteAttributeString("Type", "Array")
                ‘遍历数组读取值
                For i As Integer = 0 To jtemp.Value.Count - 1
                    writer.WriteAttributeString("Value" & i, jtemp.Value(i).ToString)
                Next
                writer.WriteEndElement()

            Case JTokenType.String

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

            Case JTokenType.Boolean

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

            Case JTokenType.Integer

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

            Case JTokenType.Float

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

            Case JTokenType.Null

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

            Case Else
        End Select

    Next

End Sub

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

1)建立结构Person

Public Class Person
    Public Name As String ‘姓名
    Public Age As Integer ‘年龄
    Public Sex_is_Male As Boolean ‘性别
    Public Structure PartnerInfo ‘伙伴信息结构
        Public Partner_Name As String ‘伙伴姓名
        Public Partner_Age As Integer ‘伙伴年龄
        Public Partner_Sex_is_Male As Boolean ‘伙伴性别
    End Structure
    Public Partner As PartnerInfo ‘伙伴
    Public Achievement As String()
    ‘‘‘ <summary>
    ‘‘‘ 构造函数
    ‘‘‘ </summary>
    ‘‘‘ <param name="isDefault">true:使用默认值,false:使用测试值</param>
    ‘‘‘ <remarks></remarks>
    Public Sub New(Optional ByVal isDefault As Boolean = True)
        Me.Name = IIf(isDefault, "", "Tsybius")
        Me.Age = IIf(isDefault, 0, 23)
        Me.Sex_is_Male = IIf(isDefault, True, True)
        Me.Partner.Partner_Name = IIf(isDefault, "", "Galatea")
        Me.Partner.Partner_Age = IIf(isDefault, 0, 21)
        Me.Partner.Partner_Sex_is_Male = IIf(isDefault, True, False)
        Me.Achievement = IIf(isDefault, New String() {},
            New String() {"ach1", "ach2", "ach3"})
    End Sub
End Class

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

Sub Main()

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

    ‘建立Person结构实例
    Dim p As Person = New Person(False)

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

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

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

    Console.ReadLine()

End Sub

3)运行结果

控制台输出结果

生成的x.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>

END

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

时间: 2024-11-12 17:48:07

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

java将已有的字符串保存到txt文件中

python网络爬虫-通过互联网采集 RMQ算法的学习(区间最值问题)NYOJ119士兵杀敌(三) JAVA常用设计模式 Java多线程知识要点 9fw谀泄牡http://p.baidu.com/itopic/main/center?uid=15fe616263346630323931e4ac&qizj夹餐智p7k9e6律犹媒http://p.baidu.com/itopic/main/center?uid=6bfe616263386334303438e5ac&8q90潦卓嚷v5uuq9轮

Qt Dom方式写xml,以及保存到xml文件中

#include <QString> #include <QDebug> #include <stdio.h> #include <stdlib.h> #include <QDomDocument> #include <QtXml> //XML DOM的方式 int main(int argc, char *argv[]) {     QByteArray array;     QDomDocument doc;     QDomPr

利用jQuery传送json格式的字符串,后端用ashx文件来接收

在Default.aspx里面,我们会透过javascript建立两个物件,分别有Name和Age的属性,再透过Array的方式,将这两个物件塞到Array里面去.使用Ajax内建的$.ajax API,我们可以把url,type,data,sucess等几个属性先设定好,其中要注意到当我们想透过json格式来传递资料的时候,我们可以用JSON.stringify()的方法来把想要传送的阵列资料先转换成json格式. 1 <%@ Page Language="C#" AutoEv

内核模块遍历进程和任务队列保存到proc文件中

实现一个模块用它遍历当前进程的父进程和任务队列,并将遍历的结果输出到一个proc 文件中(遍历可以从 current 当前进程开始,父进程遍历到初始化进程,遍历任务队列可以利用 for_each_process 宏). 下面是我的内核模块的实现部分: /************************************************************ * 使用内核模块从当前进程开始先前遍历,知道找到第一个进程为止 * * 并将遍历的结果保存到proc文件中 * ******

Sql数据保存到Excel文件中

public string ExportExcel( DataSet ds,string saveFileName) { try { if (ds == null) return "数据库为空"; bool fileSaved = false; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) {

C#从数据库读取数据到DataSet并保存到xml文件

using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.IO; public class TestWriteXML { public static void Main() { String strFileName = c:/temp/out.xml; SqlConnection conn = new SqlConnection(server=localhost;uid

php下载图片生成原始路径 并将下载过的图片路径保存到txt文件中

<?php //header("content-Type: text/html; charset=utf-8"); @ini_set('date.timezone', 'Asia/Shanghai'); @set_time_limit(0); @ini_set('memory_limit','100M'); $headurl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]; $headurl

np.savetxt()——将array保存到txt文件,并保持原格式

问题:1.如何将array保存到txt文件中?2.如何将存到txt文件中的数据读出为ndarray类型? 需求:科学计算中,往往需要将运算结果(array类型)保存到本地,以便进行后续的数据分析. 解决:直接用numpy中的方法. 1:numpy.savetxt(fname,X):第一个参数为文件名,第二个参数为需要存的数组(一维或者二维). 2.numpy.loadtxt(fname):将数据读出为array类型. 示例 >>> import numpy as np >>&

转:ffmpeg学习(二) 通过rtsp获取H264裸流并保存到mp4文件

本篇将使用上节http://www.cnblogs.com/wenjingu/p/3977015.html中编译好的库文件通过rtsp获取网络上的h464裸流并保存到mp4文件中. 1.VS2010建立VC++  win32控制台项目 2.在工程目录下建立lib目录和include目录,将已编译好的lib拷打lib下,include拷到include下,dll拷到Debug目录下 3.工程属性--配置属性--VC++目录--包含目录,添加ffmpeg头文件目录及其他第三方头文件目录 链接器--常