[英]Issue with Converting JSON to VB.NET datatable
以下是我的JSON響應文本。 我驗證了響應,沒有錯誤。 我正在嘗試將其轉換為數據表,但它給我null或錯誤。
JSON響應:
{
"data": {
"b2b": [
{
"inv": [
{
"itms": [
{
"num": 1,
"itc": {
"tx_cs": 0,
"elg": "ip",
"tx_i": 180
},
"itm_det": {
"csamt": 0,
"rt": 18,
"txval": 1000,
"iamt": 180
}
}
],
"val": 1000,
"inv_typ": "R",
"flag": "N",
"updby": "S",
"pos": "27",
"idt": "24-07-2017",
"rchrg": "N",
"cflag": "U",
"inum": "191001",
"chksum": "52d0e920428464d85721bfcd7f3bfb4f16fd00d93a9df7d6a6f0814bed716c28"
},
{
"itms": [
{
"num": 1,
"itc": {
"tx_cs": 0,
"elg": "ip",
"tx_i": 18
},
"itm_det": {
"csamt": 0,
"rt": 18,
"txval": 100,
"iamt": 18
}
}
],
"val": 100,
"inv_typ": "R",
"flag": "N",
"updby": "S",
"pos": "27",
"idt": "24-07-2017",
"rchrg": "N",
"cflag": "U",
"inum": "191002",
"chksum": "aaa1efcf335549b58059c9f3d03807d7c41b007022216f8a90db12c60cd2b9ef"
}
],
"cfs": "N",
"ctin": "1225586"
}
]
},
"header": {
"email": "test@test.com",
"gstin": "65656451",
"retperiod": "072017",
"gst_username": "sampleaccount",
"state_cd": "27",
"ip_address": "192.168.2.200",
"txn": "s4f5sdf54sdf5s4df5",
"client_id": "removedfortest",
"client_secret": "removedfortest",
"authorization": "Basic a4s5df45asdf54as5d4f",
"ret_period": "072017"
},
"status_cd": "1",
"status_desc": "request succeeds"
}
以下是我定義的課程
Public Class Itc
Public Property tx_cs As Integer
Public Property elg As String
Public Property tx_i As Integer
End Class
Public Class ItmDet
Public Property csamt As Integer
Public Property rt As Integer
Public Property txval As Integer
Public Property iamt As Integer
End Class
Public Class Itm
Public Property num As Integer
Public Property itc As Itc
Public Property itm_det As ItmDet
End Class
Public Class Inv
Public Property itms As Itm()
Public Property val As Integer
Public Property inv_typ As String
Public Property flag As String
Public Property updby As String
Public Property pos As String
Public Property idt As String
Public Property rchrg As String
Public Property cflag As String
Public Property inum As String
Public Property chksum As String
End Class
Public Class B2b
Public Property inv As Inv()
Public Property cfs As String
Public Property ctin As String
End Class
Public Class Data
Public Property b2b As B2b()
End Class
Public Class Header
Public Property email As String
Public Property gstin As String
Public Property retperiod As String
Public Property gst_username As String
Public Property state_cd As String
Public Property ip_address As String
Public Property txn As String
Public Property client_id As String
Public Property client_secret As String
Public Property authorization As String
Public Property ret_period As String
End Class
Public Class Example
Public Property data As Data
Public Property status_cd As String
Public Property status_desc As String
Public Property header As Header
End Class
然后我嘗試執行以下操作:
以下返回我在數據表中為Null
Dim table as datatable = JsonConvert.DeserializeObject(Of RootObject(Of DataTable))(responsetext).Table
也嘗試過:以下不允許我鍵入rootofTable.data
Dim rootOfList = JsonConvert.DeserializeObject(Of RootObject(Of List(Of data)))(responsetext)
Dim table As DataTable = rootOfTable.data
這些都沒有使我的價值觀回到數據表。 數據集保持為空。
請幫忙解決。
謝謝
至少有4種不同的方法可以實現(我能想到),這里是一個示例,我認為這對您來說應該足夠了。
您基本上只需設置json的哪一部分進入哪一列。
Imports Newtonsoft.Json.Linq
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim JsonP As JObject = JObject.Parse(TextBox1.Text)
Dim SetPointer As JToken = JsonP("data")("b2b")(0)("inv")
For Each item In SetPointer
Dim NewDR As DataRow = TempDT.NewRow
NewDR("val") = item("val")
NewDR("inv_typ") = item("val")
NewDR("flag") = item("flag")
NewDR("updby") = item("updby")
NewDR("pos") = item("pos")
NewDR("idt") = item("idt")
NewDR("rchrg") = item("rchrg")
NewDR("cflag") = item("cflag")
NewDR("inum") = item("inum")
NewDR("chksum") = item("chksum")
NewDR("itms_num") = item("itms")(0)("num")
NewDR("itms_itc_cs") = item("itms")(0)("itc")("tx_cs")
TempDT.Rows.Add(NewDR)
Next
DataGridView1.DataSource = TempDT
End Sub
Dim TempDT As New DataTable
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
TempDT.Columns.Add("val")
TempDT.Columns.Add("inv_typ")
TempDT.Columns.Add("flag")
TempDT.Columns.Add("updby")
TempDT.Columns.Add("pos")
TempDT.Columns.Add("idt")
TempDT.Columns.Add("rchrg")
TempDT.Columns.Add("cflag")
TempDT.Columns.Add("inum")
TempDT.Columns.Add("chksum")
TempDT.Columns.Add("itms_num")
TempDT.Columns.Add("itms_itc_cs")
End Sub
End Class
我沒有做任何事情,這只是概念的演示。
使用json visualizer。 https://jsonformatter.curiousconcept.com/,然后在瀏覽時,將名稱寫成{},寫出名稱,如果是數組[]。
就像您可以完全寫出(“ data”)(“ b2b”)(0)(“ inv”)(0)(“ itms”)(0)(“ itc”)(“ tx_cs”)從中獲取價值一樣。 但是導航到更近的地方然后像(“ itms”)那樣寫一部分會更容易。
而且,由於數組在大多數情況下具有動態數量的成員,因此您通常無法為數組編寫固定路徑,因此,您必須要做(x)並遍歷項目,而不是(0)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.