ServiceStack.Text чтение результатов JSON не работает
Я просто пытаюсь выяснить лучший способ десериализации строки json, возвращенной из вызова API стороннего производителя. Я читаю ServiceStack быстро, поэтому хочу попробовать. Нет опыта, и вот что я сделал:
- Открылась Visual Studio 2013
- Создан новый проект Windows Forms Application
- Установленный ServiceStack.Text (на основе https://servicestack.net/download)
- Добавлены кнопка (btnView) и текстовое поле (txtOutput)
Добавить код в событие btnView_Click
Private Sub btnView_Click(sender As Object, e As EventArgs) Handles btnView.Click Me.Cursor = Cursors.WaitCursor Dim wp As New WebPost 'this allows to pass url and return results wp.URL = "xxxx" Dim sJSONRetVal As String = wp.Request(String.Empty, True) 'sJSONRetVal return values looks like the following: '{"complaints":[{"feedback_type":"abuse","subject":"Sales Agent Position"},{"feedback_type":"abuse","subject":"Sales Agent Position"}],"message":"OK","code":0} 'ServiceStack.Text example Dim t As SMTP_Complaints = ServiceStack.Text.JsonSerializer.DeserializeFromString(Of SMTP_Complaints)(sJSONRetVal) 'For Each xi As SMTP_Complaints In t ' txtOutput.Text &= xi.mail_from & vbCrLf 'Next wp = Nothing txtOutput.Text = t.ToString Me.Cursor = Cursors.Default End Sub Public Class SMTP_Complaints Dim _feedback_type As String = "" Dim _subject As String = "" Public Property feedback_type As String Get Return _feedback_type End Get Set(value As String) _feedback_type = value End Set End Property Public Property subject As String Get Return _subject End Get Set(value As String) _subject = value End Set End Property End Class
Выше, кажется, не получить никаких данных. как бы я перебрать возвращенные данные и вернуть данные из обоих экземпляров? Просто не уверен, как мне нужно настроить это, чтобы прочитать данные JSON и затем иметь возможность выводить.
1 ответ
На основе возвращенного JSON:
{"complaints":[{"feedback_type":"abuse","subject":"Sales Agent Position"},{"feedback_type":"abuse","subject":"Sales Agent Position"}],"message":"OK","code":0}
Вам потребуется два DTO для десериализации этого результата.
Я использовал автоматически реализованные свойства, чтобы упростить сложность кода. Если вы используете более старую версию VB, вам нужно расширить ее, чтобы включить вспомогательное поле с методом get и set.
Public Class SMTP_Complaint
Public Property feedback_type As String
Public Property subject As String
End Class
Public Class SMTP_ComplaintsResponse
Public Property complaints As SMTP_Complaint()
Public Property message As String
Public Property code As Integer
End Class
Вам нужно SMTP_ComplaintsResponse
класс, потому что ваши жалобы обернуты в вашем ответе JSON.
Затем десериализовать ответ:
Dim response = JsonSerializer.DeserializeFromString(Of SMTP_ComplaintsResponse)(sJSONRetVal)
И ваши жалобы будут доступны:
For Each complaint As var In response.complaints
Console.WriteLine("Type: {0}, Subject {1}", complaint.feedback_type, complaint.subject)
Next