It's because string returning from url its not a proper valid json convertable data.
As it return as below string
{"error":"false","error_message":"","tarif":[{"layanan":"ODS","jenis":"PAKET/DOKUMEN","tarif":"28000","tarif_add":"0","etd":"1-1D"},{"layanan":"REG","jenis":"PAKET/DOKUMEN","tarif":"16000","tarif_add":"0","etd":"2-4D"},{"layanan":"SDS","jenis":"PAKET/DOKUMEN","tarif":"341000","tarif_add":"45000","etd":"0"}]}
you need to add "[" before string starting postion and "]" after string ending postion and then you can convert it as JSON format.
as like below.
[{"error":"false","error_message":"","tarif":[{"layanan":"ODS","jenis":"PAKET/DOKUMEN","tarif":"28000","tarif_add":"0","etd":"1-1D"},{"layanan":"REG","jenis":"PAKET/DOKUMEN","tarif":"16000","tarif_add":"0","etd":"2-4D"},{"layanan":"SDS","jenis":"PAKET/DOKUMEN","tarif":"341000","tarif_add":"45000","etd":"0"}]}]
also you need to make some change in class as it may return more tarif details. Refer the below code and try it in your code by implimenting your logic.
VB.Net
Imports System.Data
Imports Newtonsoft.Json.Linq
Imports System.Web.Script.Serialization
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
BindData()
End If
End Sub
Private Sub BindData()
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(6) {New DataColumn("error", GetType(String)), New DataColumn("error_message", GetType(String)),
New DataColumn("tarif_layanan", GetType(String)), New DataColumn("tarif_jenis", GetType(String)),
New DataColumn("tarif_tarif", GetType(Double)), New DataColumn("tarif_tarif_add", GetType(Double)), New DataColumn("tarif_etd", GetType(String))})
Dim url As String = New System.Net.WebClient().DownloadString("http://222.124.22.130/wservice2.php?orig=cgk&dest=srg")
Dim jsonArray As JArray = JArray.Parse("[" + url.Trim() + "]")
For i As Integer = 0 To jsonArray.Count - 1
Dim isiData As Infos = (New JavaScriptSerializer()).Deserialize(Of Infos)(jsonArray(i).ToString())
For j As Integer = 0 To isiData.tarif.Count - 1
Dim dr As DataRow = dt.NewRow()
dr("error") = isiData.error
dr("error_message") = isiData.error_message
dr("tarif_layanan") = isiData.tarif(j).layanan
dr("tarif_jenis") = isiData.tarif(j).jenis
dr("tarif_tarif") = isiData.tarif(j).tarif
dr("tarif_tarif_add") = isiData.tarif(j).tarif_add
dr("tarif_etd") = isiData.tarif(j).etd
dt.Rows.Add(dr)
Next
Next
If dt.Rows.Count > 0 Then
'Bind DataTable to your GridView
grdView.DataSource = dt
grdView.DataBind()
End If
End Sub
Public Class Infos
Public Property error_message() As String
Get
Return m_error_message
End Get
Set(value As String)
m_error_message = value
End Set
End Property
Private m_error_message As String
Public Property [error]() As String
Get
Return m_error
End Get
Set(value As String)
m_error = value
End Set
End Property
Private m_error As String
Private m_tarif As List(Of Tarif)
Public Property tarif() As List(Of Tarif)
Get
Return m_tarif
End Get
Set(value As List(Of Tarif))
m_tarif = value
End Set
End Property
End Class
Public Class Tarif
Public Property layanan() As String
Get
Return m_layanan
End Get
Set(value As String)
m_layanan = value
End Set
End Property
Private m_layanan As String
Public Property jenis() As String
Get
Return m_jenis
End Get
Set(value As String)
m_jenis = value
End Set
End Property
Private m_jenis As String
Public Property tarif() As String
Get
Return m_tarif
End Get
Set(value As String)
m_tarif = value
End Set
End Property
Private m_tarif As String
Public Property tarif_add() As String
Get
Return m_tarif_add
End Get
Set(value As String)
m_tarif_add = value
End Set
End Property
Private m_tarif_add As String
Public Property etd() As String
Get
Return m_etd
End Get
Set(value As String)
m_etd = value
End Set
End Property
Private m_etd As String
End Class
C#
using System;
using System.Data;
using Newtonsoft.Json.Linq;
using System.Web.Script.Serialization;
using System.Collections.Generic;
public partial class viewTarifExpress : System.Web.UI.Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
private void BindData()
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[7] {
new DataColumn("error", typeof(string)),
new DataColumn("error_message", typeof(string)),
new DataColumn("tarif_layanan", typeof(string)),
new DataColumn("tarif_jenis", typeof(string)),
new DataColumn("tarif_tarif", typeof(double)),
new DataColumn("tarif_tarif_add", typeof(double)),
new DataColumn("tarif_etd", typeof(string))
});
string url = new System.Net.WebClient().DownloadString("http://222.124.22.130/wservice2.php?orig=cgk&dest=srg");
JArray jsonArray = JArray.Parse("[" + url.Trim() + "]");
for (int i = 0; i <= jsonArray.Count - 1; i++)
{
Infos isiData = (new JavaScriptSerializer()).Deserialize<Infos>(jsonArray[i].ToString());
for (int j = 0; j <= isiData.tarif.Count - 1; j++)
{
DataRow dr = dt.NewRow();
dr["error"] = isiData.error;
dr["error_message"] = isiData.error_message;
dr["tarif_layanan"] = isiData.tarif[j].layanan;
dr["tarif_jenis"] = isiData.tarif[j].jenis;
dr["tarif_tarif"] = isiData.tarif[j].tarif;
dr["tarif_tarif_add"] = isiData.tarif[j].tarif_add;
dr["tarif_etd"] = isiData.tarif[j].etd;
dt.Rows.Add(dr);
}
}
if (dt.Rows.Count > 0)
{
//Bind DataTable to your GridView
grdView.DataSource = dt;
grdView.DataBind();
}
}
public class Infos
{
public string error_message
{
get { return m_error_message; }
set { m_error_message = value; }
}
private string m_error_message;
public string error
{
get { return m_error; }
set { m_error = value; }
}
private string m_error;
private List<Tarif> m_tarif;
public List<Tarif> tarif
{
get { return m_tarif; }
set { m_tarif = value; }
}
}
public class Tarif
{
public string layanan
{
get { return m_layanan; }
set { m_layanan = value; }
}
private string m_layanan;
public string jenis
{
get { return m_jenis; }
set { m_jenis = value; }
}
private string m_jenis;
public string tarif
{
get { return m_tarif; }
set { m_tarif = value; }
}
private string m_tarif;
public string tarif_add
{
get { return m_tarif_add; }
set { m_tarif_add = value; }
}
private string m_tarif_add;
public string etd
{
get { return m_etd; }
set { m_etd = value; }
}
private string m_etd;
}
}
Output
