记得当时使用Vb.net做了一个服务器,需要对Json数据进行解析。在Android或者C#上有比较成熟的Json解析工具类,在Vb.net上还没有。在国外一家网站上找到的这个类库。现在整理出来,供有需要的人使用。
这个类库仅支持ObjectToString,StringToObject简单的转换,在此基础上我进行了扩展,让其支持Object[]到JsonString的相互转换。这两个方法在文章最后给出(注:这两个方法没有编译到类库中,可以自己根据源码编译进去)。
日期格式转为字符串处理即可(我是这么处理的)。
先来介绍一下这个类库的使用方法。
ObjectToString 方法实例:
Imports PW.JSON Module Module1 Class Prova Private _id As Integer Private _name As String Private _valido As Boolean Private _subObject As Prova Private _numero As Integer Private _numeroDec As Double Private _array() As String Public Property ID() As Integer Get Return _id End Get Set(ByVal value As Integer) _id = value End Set End Property Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property Public Property Valido() As Boolean Get Return _valido End Get Set(ByVal value As Boolean) _valido = value End Set End Property Public Property SubObject() As Prova Get Return _subObject End Get Set(ByVal value As Prova) _subObject = value End Set End Property Public Property NumeroDec() As Double Get Return _numeroDec End Get Set(ByVal value As Double) _numeroDec = value End Set End Property Public Property Array() As String() Get Return _array End Get Set(ByVal value As String()) _array = value End Set End Property Public Sub New(ByVal ID As Integer,ByVal Name As String) _id = ID _name = Name End Sub Public Function SomeMethod() As String Return "Method: " & _id End Function End Class Sub Main() Dim objprova As New Prova(1,"Nome Object") objprova.Array = Split("A E I O U") objprova.NumeroDec = 100.34 objprova.SubObject = New Prova(2,"Nome - SubObject") objprova.Valido = True Console.WriteLine(PW.JSON.JSONHelper.ObjectToString(objprova)) Console.ReadLine() End Sub End Module
打印结果为:
{"NumeroDec": 100.34,"Name": "Nome Object","Array": ["A","E","I","O","U"],"SubObject": {"NumeroDec": 0,"Name": "Nome - SubObject","Array": null,"SubObject": null,"Valido": false,"ID": 2},"Valido": true,"ID": 1}
StringToObject方法实例:
Sub Main() Dim strJSON As String = "{""NumeroDec"": 100.34,""Name"": ""Nome Object""," & _ " ""Array"": [""A"",""E"",""I"",""O"",""U""]," & _ " ""SubObject"": {""NumeroDec"": 0,""Name"": ""Nome - SubObject""," & _ " ""Array"": null,""SubObject"": null,""Valido"": false,""ID"": 2}," & _ " ""Valido"": true,""ID"": 1}" Dim objprova As Prova objprova = PW.JSON.JSONHelper.StringToObject(strJSON,GetType(Prova)) Console.WriteLine(objprova.Name) Console.WriteLine(objprova.SubObject.Name) Console.ReadLine() End Sub
结果为:
Nome Object
Nome - SubObject
''' <summary> ''' 将对象数组拼装成json字符串 ''' </summary> ''' <param name="objectList"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function ObjectListToString(ByVal objectList As List(Of Object)) Dim stringBuilder As New String("") stringBuilder += "[" For Each entity As Object In objectList stringBuilder += PW.JSON.JSONHelper.ObjectToString(entity) + "," Next stringBuilder = stringBuilder.Substring(0,stringBuilder.LastIndexOf(",")) stringBuilder += "]" Return stringBuilder End Function
''' <summary> ''' 将Json格式的数据解析成Object ''' </summary> ''' <param name="jsonData">包含点菜信息的json数据</param> ''' <param name="_classType">转化成sellLogDetail类</param> ''' <returns></returns> ''' <remarks></remarks> Private Function StringToObjectList(ByVal jsonData As String,ByVal _classType As Type) '传过来的字符串是“[{ },{ },{ }]”,去掉最后面的“]”,加上一个“,”,这样可以按“},”进行拆分 Dim adatperString = jsonData.Substring(0,jsonData.LastIndexOf("}") + 1) + "," '然后按“{”拆分成数组 Dim str As String() = adatperString.Split("{") Dim list As New List(Of SellLogDetail) For index = 1 To str.Length - 1 If (str(index).EndsWith("},")) Then '拼装成一个完整的json数据 Dim strData As String = "{" + str(index).Substring(0,str(index).Length - 1) 'MsgBox(strData) Dim detail As New SellLogDetail Try '转化成对象SellLogDetail detail = PW.JSON.JSONHelper.StringToObject(strData,GetType(SellLogDetail)) Catch ex As Exception MsgBox(ex.Message) End Try list.Add(detail) End If Next '返回列表 Return list End Function
附类库+demo
欢迎访问:
望月听涛