将JSONtoken转换为数据源的更好方法
我已经创建了一个带有MySQL数据库、PHP和JSON的Web服务,用于上传和下载数据。JSON容器由3个标记组成:“geslaagd”(作为布尔值)、“tekst”(作为字符串)和“inhoud”(作为数组)。JSON将被转换为适合组合框的数据源。它工作得很好,但我现在对代码的外观有问题 首先看起来是这样的:将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
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的快速响应。我已经改变了一些事情,现在我很满意。简而言之:我将所有变量变暗的部分移动到代码中的另一部分。一种定制的解析器,就像你建议的那样。