【发布时间】:2019-05-10 07:52:29
【问题描述】:
我正在使用 vb.net 开发一个 Windows 窗体应用程序,其中用户在文本框中输入一个 ID,然后在 MessageBox 中返回一个值。
我现在遇到的问题是如何解析文本框中的值,然后如何将其与 JSON 文件本身中的现有值进行比较。
这是Button类的代码:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
myFiles = MyFileObjects.Deserialize(File.ReadAllText("[FilePath]"))
Dim json = MyFileObjects.Serialize(myFiles)
File.WriteAllText("[FilePath]", json)
End Sub
这是公共类的模块:
Public Class MyFileObjects
Public Class MyFile
<JsonProperty("filename")>
Public Property FileName As String
<JsonProperty("title")>
Public Property Title As String
<JsonProperty("type")>
Public Property Type As String
End Class
Public Shared Function Serialize(myFiles As List(Of MyFile)) As String
Return JsonConvert.SerializeObject(myFiles)
End Function
Public Shared Function Deserialize(json As String) As List(Of MyFile)
Return JsonConvert.DeserializeObject(Of List(Of MyFile))(json)
End Function
End Class
这是用于文本框的:
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyValue = Keys.Enter Then
Dim selectedItem = myFiles.Find(Function(f) f.FileName.Equals(TextBox1.Text))
If selectedItem IsNot Nothing Then
MessageBox.Show(selectedItem.Title)
End If
End If
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
TextBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend
TextBox1.AutoCompleteSource = AutoCompleteSource.CustomSource
TextBox1.AutoCompleteCustomSource.AddRange(myFiles.Select(Function(f) f.FileName).ToArray())
End Sub
这是我的 JSON 的内容:
[
{
"filename": "123.xml",
"title": "Hello",
"type": "PU"
},
{
"filename": "456.xml",
"title": "World",
"type": "PU"
},
{
"filename": "258.xml",
"title": "Test",
"type": "PU"
}
]
用户应在文本框字段中搜索datafilename,并在消息框中显示“标题”。现在我不知道下一步该做什么。
【问题讨论】:
-
我正计划向文本框添加自动完成功能,但我不知道是否可以将这些值存储在 json 文件中,而不是在自动完成源中手动输入列表.然后,用户可以从包含“文件名”值以及与“标题”值匹配的列表中选择一个。最后,“标题”值将显示在消息框中。当我想从 json 文件中获取值时,您认为可以这样做吗?
标签: json vb.net winforms json.net