Public Shared Function GetVolsForMU(ByVal MU As String) As DataTableReader
Dim dataSet As New DataSet
Dim responseData As String
Try
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim reader As StreamReader
request = HttpWebRequest.Create("https://myapi/" & MU)
request.Method = "GET"
request.ContentType = "application/json"
request.Accept = "application/json"
request.Headers.Add("Authorization", "Bearer " & ConfigurationManager.AppSettings("BearerToken"))
request.ReadWriteTimeout = 11000
response = request.GetResponse
reader = New StreamReader(response.GetResponseStream)
responseData = reader.ReadToEnd
Catch ex As Exception
My.Utility.LogManager.LogError("VolunteerDAL", "GetVolsForMU", ex)
My.Utility.LogManager.LogInfo("VolunteerDAL", "GetVolsForMU MU was: " & MU)
Throw New My.Exceptions.APIException("Error Calling API.")
End Try
If responseData Is Nothing Then
Return Nothing
End If
Dim volunteers = JsonConvert.DeserializeObject(Of DataTable)(responseData)
Dim tableReader As DataTableReader = dataSet.CreateDataReader(volunteers)
Return tableReader
End Function
My volunteers variable is returning as = {}
responseData = "[{""userId"":""93e4098c-db55-3245-accb-40fe48cd0330"",""firstName"":""Test"",""lastName"":""Tester"",""middleName"":""Super"",""preferredName"":""Test"",""displayName"":""Test"",""pmNumber"":""89332220"",""eMail"":""test@gmail.com"",""username"":""testAPI"",""startDate"":null,""lastLogin"":""2020-08-12T16:25:38.173"",""inactive"":null,""assignmentId"":""334dadbb-bf34-4b92-1783-08da7a5bd456"",""roleId"":""B6CD23CA-7EBF-40FC-99AB-6F91999ABEF5"",""jobName"":""Volunteer"",""jobCodeGroupName"":""Volunteer"",""mU"":""2430"",""expirationDate"":""2023-08-31T00:00:00"",""active"":true}]"
The DataTableReader is coming up empty based off of volunteers not being deserialized correctly. Thanks for any help!
Here's what I ended up with to get it to work.
Public Shared Function ConvertToDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
Dim table As New DataTable()
Dim fields() = GetType(T).GetProperties()
For Each field As PropertyInfo In fields
table.Columns.Add(field.Name, If(Nullable.GetUnderlyingType(field.PropertyType), field.PropertyType))
Next
For Each item As T In list
Dim row As DataRow = table.NewRow()
For Each field As PropertyInfo In fields
row(field.Name) = If(field.GetValue(item) Is Nothing, DbNull.Value, field.GetValue(item))
Next
table.Rows.Add(row)
Next
Return table
End Function
Public Shared Function GetVolsForMU(ByVal MU As String) As DataTableReader
Dim dataSet As New DataSet
Dim responseData As String
Try
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim reader As StreamReader
request = HttpWebRequest.Create("https://myapi/" & MU)
request.Method = "GET"
request.ContentType = "application/json"
request.Accept = "application/json"
request.Headers.Add("Authorization", "Bearer " & ConfigurationManager.AppSettings("BearerToken"))
request.ReadWriteTimeout = 11000
response = request.GetResponse
reader = New StreamReader(response.GetResponseStream)
responseData = reader.ReadToEnd
Catch ex As Exception
My.Utility.LogManager.LogError("VolunteerDAL", "GetVolsForMU", ex)
My.Utility.LogManager.LogInfo("VolunteerDAL", "GetVolsForMU MU was: " & MU)
Throw New My.Exceptions.APIException("Error Calling API.")
End Try
If responseData Is Nothing Then
Return Nothing
End If
Dim listOfUserAssignments = JsonConvert.DeserializeObject(Of List(Of UserAssignment))(responseData)
Dim volunteers = ConvertToDataTable(listOfUserAssignments)
Dim tableReader As DataTableReader = dataSet.CreateDataReader(volunteers)
Return tableReader
End Function
The code above is what ended up working for me.