【发布时间】:2020-06-30 09:47:36
【问题描述】:
我有一个带有组合框和一些文本框的 winform。我通过 REST API 获取 Json 数据并通过 Json.NET 和类文件对其进行反序列化。
JsonHelper
Imports Newtonsoft.Json
Public Module JsonHelper
Public Function FromClass(Of T)(data As T, Optional isEmptyToNull As Boolean = False, Optional jsonSettings As JsonSerializerSettings = Nothing) As String
Dim response As String = String.Empty
If Not EqualityComparer(Of T).Default.Equals(data, Nothing) Then
response = JsonConvert.SerializeObject(data, jsonSettings)
End If
Return If(isEmptyToNull, (If(response = "{}", "null", response)), response)
End Function
Public Function ToClass(Of T)(data As String, Optional jsonSettings As JsonSerializerSettings = Nothing) As T
Dim response = Nothing
If Not String.IsNullOrEmpty(data) Then
response = If(jsonSettings Is Nothing,
JsonConvert.DeserializeObject(Of T)(data),
JsonConvert.DeserializeObject(Of T)(data, jsonSettings))
End If
Return response
End Function
End Module
Imports Newtonsoft.Json
Namespace Models
Public Class Header
<JsonProperty("Name")>
Public Property Name As String
<JsonProperty("DisplayAt")>
Public Property DisplayAt As String
End Class
类文件
Public Class DataSource
<JsonProperty("Id")>
Public Property Id As String
<JsonProperty("Name")>
Public Property Name As String
<JsonProperty("Headers")>
Public Property Headers As Header()
<JsonProperty("Rows")>
Public Property Rows As String()()
<JsonProperty("TotalRows")>
Public Property TotalRows As Integer
<JsonProperty("LastUpdated")>
Public Property LastUpdated As DateTime
<JsonProperty("CompanyId")>
Public Property CompanyId As Integer
End Class
Public Class Category
<JsonProperty("DataSource")>
Public Property DataSource As DataSource
End Class
End Namespace
组合框由 Json 文件中的数据填充,并通过 bindingsource 将文本框连接到组合框。因此,如果您选择另一行,文本框的值会发生变化。
绑定源
Dim bindingSource As BindingSource = New BindingSource()
bindingSource.DataSource = dt
bindingSource.Sort = "Weergave DESC"
ListBox1.DataSource = bindingSource
ListBox1.DisplayMember = "Weergave"
ListBox1.ValueMember = "Id"
'ListBox1.Sorted = True
txtWeergave.DataBindings.Clear()
txtWeergave.DataBindings.Add(New Binding("Text", ListBox1.DataSource, "Weergave", True, DataSourceUpdateMode.OnPropertyChanged))
txtProjectnaam.DataBindings.Clear()
txtProjectnaam.DataBindings.Add(New Binding("Text", ListBox1.DataSource, "Projectnaam", True, DataSourceUpdateMode.OnPropertyChanged))
txtProjectnummer.DataBindings.Clear()
txtProjectnummer.DataBindings.Add(New Binding("Text", ListBox1.DataSource, "Projectnummer", True, DataSourceUpdateMode.OnPropertyChanged))
txtServicemonteur.DataBindings.Clear()
txtServicemonteur.DataBindings.Add(New Binding("Text", ListBox1.DataSource, "Servicemonteur", True, DataSourceUpdateMode.OnPropertyChanged))
我不想通过 PUT 请求对数据进行一些更改并更新数据库。 因此,我做了以下例程:
Private Sub PutData()
Dim request As WebRequest = WebRequest.Create("my url")
request.ContentType = "application/json"
request.Method = "PUT"
' Get the response.
Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
' Get the stream containing content returned by the server.
Dim dataStream As Stream = response.GetResponseStream()
' Open the stream using a StreamReader for easy access.
Dim reader As New StreamReader(dataStream)
' Read the content.
Dim responseFromServer As String = reader.ReadToEnd()
'Dim JObject As Object
Dim rawJson As String = responseFromServer
Dim dataSource As String = JsonHelper.FromClass(Of Category)(rawJson).DataSource
End Sub
以下事情对我来说不是很清楚。 如果我在文本框中进行更改,则组合框中也会进行更改,因为它们已通过绑定源相互连接。但是 Class 文件中的值是否也会发生变化?
如何更改文本框的值并通过 PUT 请求更新数据源?
【问题讨论】:
标签: json vb.net visual-studio-2017 json.net