2011/04/09

VB.net Convert to JSON

VB.net
  1. Public Class JSONConvert
  2.     Public Shared Function DataTable2NameValueCollection(ByVal dt As DataTable) As NameValueCollection
  3.         Dim columnlist As New List(Of String)()
  4.         For Each column As DataColumn In dt.Columns
  5.             columnlist.Add(column.ColumnName)
  6.         Next
  7.  
  8.         Dim rowlist As New List(Of String)()
  9.         For Each row As DataRow In dt.Rows
  10.             Dim itemlist As New List(Of String)()
  11.             For Each column As DataColumn In dt.Columns
  12.                 If column.DataType.Equals(GetType(Int32)) Or column.DataType.Equals(GetType(Double)) Then
  13.                     itemlist.Add(row(column.ColumnName))
  14.                 Else
  15.                     itemlist.Add(String.Format("""{0}""", row(column.ColumnName)))
  16.                 End If
  17.             Next
  18.             rowlist.Add(String.Format("[{0}]", String.Join(", ", itemlist.ToArray())))
  19.         Next
  20.  
  21.         Dim nv As New NameValueCollection()
  22.         nv.Add("columns", Array2JSONArray(columnlist.ToArray()))
  23.         nv.Add("rows", Array2JSONArray(rowlist.ToArray()))
  24.         Return nv
  25.     End Function
  26.  
  27.     Public Shared Function DataTable2JSONObject(ByVal dt As DataTable) As String
  28.         Dim nv As NameValueCollection = DataTable2NameValueCollection(dt)
  29.         Return NameValueCollection2JSONObjectArray(nv)
  30.     End Function
  31.  
  32.     Public Shared Function NameValueCollection2JSONObjectArray(ByVal nv As System.Collections.Specialized.NameValueCollection) As String
  33.         Dim list As New List(Of String)()
  34.         For Each name As String In nv.AllKeys
  35.             If Regex.IsMatch(nv(name), "^(.*(\[|\]|{|})+.*|\d+)$") Then
  36.                 list.Add(String.Format("""{0}"": {1}", name, nv(name)))
  37.             Else
  38.                 list.Add(String.Format("""{0}"": ""{1}""", name, nv(name)))
  39.             End If
  40.         Next
  41.         Return String.Format("{{{0}}}", String.Join(", ", list.ToArray()))
  42.     End Function
  43.  
  44.     Public Shared Function Array2JSONArray(ByVal arr As Array) As String
  45.         If Regex.IsMatch(String.Join(", ", CType(arr, String())), "^(.*(\[|\]|{|})+.*|\d+)$") Then
  46.             Return ObjectArray2JSONArray(arr)
  47.         Else
  48.             Return StringArray2JSONArray(arr)
  49.         End If
  50.     End Function
  51.  
  52.     Public Shared Function StringArray2JSONArray(ByVal arr() As String) As String
  53.         If arr.Length = 0 Then
  54.             Return ("[]")
  55.         Else
  56.             Return String.Format("[""{0}""]", String.Join(""", """, arr))
  57.         End If
  58.     End Function
  59.  
  60.     Public Shared Function ObjectArray2JSONArray(ByVal arr As Array) As String
  61.         Return String.Format("[{0}]", String.Join(", ", CType(arr, String())))
  62.     End Function
  63. End Class

沒有留言: