Search code examples
asp.netjsonvb.netwebmethod

Iterate through JSON array in webmethod using vb.net


I have this JSON Array of objects that represents 3 records

{"Data":[{"RecID":2383,"PrtStatus":true},{"RecID":3387,"PrtStatus":true},{"RecID":3388,"PrtStatus":true}]}

and I m trying to iterate through it. I built the following class for it

Public Class TblRegJoindata
    Dim p_RecID As Integer
    Dim p_status As Boolean

    Public Property RecID As Integer
        Get
            Return p_RecID
        End Get
        Set(ByVal value As Integer)
            p_RecID = value
        End Set
    End Property

    Public Property PrtStatus As Boolean
        Get
            Return p_status
        End Get
        Set(ByVal value As Boolean)
            p_status = value
        End Set
    End Property
End Class

In my web method I can access the data but can't figure out a way to loop through them and store them

<WebMethod> _
Public Function TblRegJoinUpd3(ByVal Data As List(Of TblRegJoindata))
    Dim x As Integer = Data(0).RecID
End Function

What I m Trying to do is something like this, I tried to implement it but using "length" property is not allowed

For i As Integer = 0 To Data.Length - 1
    cmd.Parameters.Clear()
    cmd.Parameters.Add("@RecID", SqlDbType.Int).Value = Convert.ToInt32(i)
    cmd.Parameters.Add("@PrtStatus", SqlDbType.Bit).Value = Boolean.Parse((i))
    cmd.ExecuteNonQuery()
Next

Update

<WebMethod> _
Public Function TblRegJoinUpd3(ByVal Data As List(Of TblRegJoindata))
    Dim constr As String = ConfigurationManager.ConnectionStrings("ARTSQLConStrng").ConnectionString
    Using con As New SqlConnection(constr)
        Using cmd As New SqlCommand("TblRegjoinUpdRec", con)
            cmd.CommandType = CommandType.StoredProcedure
            con.Open()
            For i As Integer = 0 To Data.Count - 1
                cmd.Parameters.Clear()
                cmd.Parameters.Add("@RecID", SqlDbType.Int).Value = Convert.ToInt32(Data(i).RecID)
                cmd.Parameters.Add("@PrtStatus", SqlDbType.Bit).Value = Boolean.Parse(Data(i).PrtStatus)
                cmd.ExecuteNonQuery()
            Next
            con.Close()
        End Using
    End Using
    Return (Data.Count)

Return data.count is just for test purposes


Solution

  • Thanks to Chetan Ranpariya The whole working solution is below

    Public Class TblRegJoindata
    Dim p_RecID As Integer
    Dim p_status As Boolean
    
    Public Property RecID As Integer
        Get
            Return p_RecID
        End Get
        Set(ByVal value As Integer)
            p_RecID = value
        End Set
    End Property
    
    Public Property PrtStatus As Boolean
        Get
            Return p_status
        End Get
        Set(ByVal value As Boolean)
            p_status = value
        End Set
    End Property
    End Class
    
    <WebMethod> _
    Public Function TblRegJoinUpd3(ByVal Data As List(Of TblRegJoindata))
        Dim constr As String = ConfigurationManager.ConnectionStrings("ARTSQLConStrng").ConnectionString
        Using con As New SqlConnection(constr)
            Using cmd As New SqlCommand("TblRegjoinUpdRec", con)
                cmd.CommandType = CommandType.StoredProcedure
                con.Open()
                For i As Integer = 0 To Data.Count - 1
                    cmd.Parameters.Clear()
                    cmd.Parameters.Add("@RecID", SqlDbType.Int).Value = Convert.ToInt32(Data(i).RecID)
                    cmd.Parameters.Add("@PrtStatus", SqlDbType.Bit).Value = Boolean.Parse(Data(i).PrtStatus)
                    cmd.ExecuteNonQuery()
                Next
                con.Close()
            End Using
        End Using
        Return (Data.Count)