Лучший способ конвертировать JSONtoken в источник данных - PullRequest
0 голосов
/ 19 марта 2020

Я создал веб-сервис с базой данных MySQL, PHP и JSON для загрузки и загрузки данных. Контейнер JSON состоит из 3 токенов: «geslaagd» (как логическое значение), «текст» (как строка) и «inhoud» (как массив). JSON будет преобразован, поэтому он подходит в качестве источника данных для комбинированного списка. Он работает нормально, но у меня есть проблема с тем, как код выглядит сейчас.

Сначала это выглядело так:

Public Function VerkrijgGroepen() As JsonGroepenContainer

    ' Haal de Groepen uit een JSONobject en retouner deze aan aanvrager.
    Dim mJsonGet As String = JsonObjectDownloaden(My.Settings.ODB_UrlWebservice & My.Settings.ODB_BestandGroepenDownloaden)
    Return JsonConvert.DeserializeObject(Of JsonGroepenContainer)(mJsonGet)

End function

Public Class JsonObjectGroepenContainer     ' This is the Container-Class for database-table 'Groepen'
    Public Property geslaagd As Boolean
    Public Property tekst As String
    Public Property groepen As List(Of JsonObjectGroepenInhoud)
End Class

Public Class JsonObjectGroepenInhoud        ' This is the Inhoud-Class (Content-Class) for database-table 'Groepen'
    Public Property id As Integer
    Public Property naam As String
End Class

Это означало, что мне пришлось кодировать класс-контейнер и Inhoud-Class (Content-Class) для каждой таблицы базы данных. Поэтому я хотел создать контейнер-класс, который работал бы для каждой таблицы, и он работал бы:

Public Class JsonContainer              ' This is the Container-Class for all tables in the database.
    Public Property geslaagd As Boolean
    Public Property tekst As String
    Public Property inhoud As List(Of JToken)
End Class

Но теперь мой код выглядит так:

Public Function VerkrijgObjecten() As List(Of JsonObjectGroepenInhoud)

    ' Verkrijg JSON van webservice.
    Dim mJson As String = JsonObjectDownloaden(My.Settings.ODB_UrlWebservice & My.Settings.ODB_BestandGroepenDownloaden)
    Dim mJsonParse As JObject = JObject.Parse(mJson)
    Dim geslaagd As Boolean = CBool(mJsonParse("geslaagd"))
    Dim tekst As String = CStr(mJsonParse("tekst"))
    Dim inhoud As JToken = mJsonParse("inhoud")
    Dim groepen As New List(Of JsonObjectGroepenInhoud)

    ' Controleer of verkrijgen van JSON in webservice geslaagd is.
    If geslaagd Then

        ' Zet de inhoud van JSONtoken ("inhoud") om in een lijst met groepen.
        For Each i As JToken In inhoud
            Dim groep As JsonObjectGroepenInhoud = New JsonObjectGroepenInhoud
            groep.id = CInt(i("id"))
            groep.naam = CStr(i("naam"))
            groepen.Add(groep)
        Next
    Else

        ' Stel gebruiker op de hoogte van fout.
        MessageBox.Show(
                "Er is een fout opgetreden tijdens het ophalen van de gegevens van de Groepen. De webservice geeft een foutmelding door." & vbCrLf & vbCrLf & tekst,
                "Fout in webservice",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error
            )
    End If

    Return groepen

End Function

Он работает нормально, и Обработка ошибок теперь лучше (больше логики c), но выглядит ужасно! А когда код выглядит ужасно, это обычно ужасно !? У меня такое ощущение, что этот код можно упростить, но после 2 дней попыток я сдаюсь. Есть кто-то, кто может мне помочь? Есть другой способ или это все?

...