Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSONtoken转换为数据源的更好方法_Json_Vb.net_Type Conversion_Datasource - Fatal编程技术网

将JSONtoken转换为数据源的更好方法

将JSONtoken转换为数据源的更好方法,json,vb.net,type-conversion,datasource,Json,Vb.net,Type Conversion,Datasource,我已经创建了一个带有MySQL数据库、PHP和JSON的Web服务,用于上传和下载数据。JSON容器由3个标记组成:“geslaagd”(作为布尔值)、“tekst”(作为字符串)和“inhoud”(作为数组)。JSON将被转换为适合组合框的数据源。它工作得很好,但我现在对代码的外观有问题 首先看起来是这样的: Public Function VerkrijgGroepen() As JsonGroepenContainer ' Haal de Groepen uit een JSON

我已经创建了一个带有MySQL数据库、PHP和JSON的Web服务,用于上传和下载数据。JSON容器由3个标记组成:“geslaagd”(作为布尔值)、“tekst”(作为字符串)和“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
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
这意味着我必须为每个数据库表编写一个容器类和一个Inhoud类(内容类)。因此,我想创建一个容器类,该类适用于每个表,它可以:

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 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
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

它工作得很好,错误处理现在更好了(逻辑性更强),但看起来很糟糕!当代码看起来很糟糕时,它通常很糟糕!?我觉得这段代码可以简化,但经过两天的尝试,我放弃了。有人能帮我吗?有其他方法吗?或者是这样吗?

那么你真的在寻找一种方法来使用第一个结构,这样两个不同的JSON的
{tekstA:“a”,groepenA:{idA:1,naamA:“n”}
{tekstB:“b”,groepenB:{id:2,naamB:“o”}
可以被解析到c#端的同一个对象上?所有这些不同的JSON看起来是什么样子?如果要对它们进行相同的处理,您能否让服务器对它们进行相同的塑造?如果您不想编写一个能够理解所有不同形状的自定义解析器,那么在解析Json之前对其进行转换如何?谢谢Caius的快速响应。我已经改变了一些事情,现在我很满意。简而言之:我将所有变量变暗的部分移动到代码中的另一部分。一种定制的解析器,就像你建议的那样。