ServiceStack.Text чтение результатов JSON не работает

Я просто пытаюсь выяснить лучший способ десериализации строки json, возвращенной из вызова API стороннего производителя. Я читаю ServiceStack быстро, поэтому хочу попробовать. Нет опыта, и вот что я сделал:

  1. Открылась Visual Studio 2013
  2. Создан новый проект Windows Forms Application
  3. Установленный ServiceStack.Text (на основе https://servicestack.net/download)
  4. Добавлены кнопка (btnView) и текстовое поле (txtOutput)
  5. Добавить код в событие 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
Другие вопросы по тегам