【发布时间】:2018-01-04 20:28:51
【问题描述】:
我有一个标准 JSON 数组返回给我,我已使用 JsonConvert 对其进行反序列化,下面是我的情况的简化代表:
[
{
"name": "John",
"age": "21",
},
{
"name": "Sally",
"age": "18",
},
{
"name": "Harry",
"age": "25",
}
]
...
Public Class myExample
Public Property name as String
Public Property age as Integer
End Class
...
Dim serverResponse as string = reader.ReadToEnd()
Dim jsonResult = JsonConvert.DeserializeObject(Of List(Of myExample))(serverResponse)
在给定项目索引的情况下,我可以轻松检索姓名或年龄的值,例如,
Dim someValue = jsonResult.Item(1).name ' returns Sally
Dim someOther = jsonResult.Item(1).age ' returns 18
但我希望返回给定名称的数组的索引(整数):即,我如何搜索 Sally 并检索项目索引整数(在本例中为 1),或者在 John 的情况下,返回 0 ?我无法使用 jsonResult.IndexOf() 或 jsonResult.FindIndex() 来实现这一点,并且搜索没有结果。
我有一个广泛的 JSON,并希望遍历 dataGridViewer 列上的名称,将所有名称的年龄返回到另一列。
感谢您帮助新手!
【问题讨论】:
-
在该代码中,
jsonResult将成为List(of T),将其命名为 JSON 会使事情变得混乱,因为它不再是 JSON,而是常见的普通 NET 对象集合。您应该能够将该列表用作数据源并在那里查看您的所有数据 -
没错。
jsonResult.First(Function(x) x.name = "John")将在列表中找到第一个匹配项,但这只是一个标准的 LINQ 搜索,与 JSON 无关。如果您需要在反序列化之前在 JSON 字符串中找到该项目,那是一回事,但是一旦您反序列化它,它就不再是 JSON,它只是一个普通的 .NET 列表。 -
是的,这也行。它只是一个列表,因此任何在列表中查找项目的方法都可以使用。给猫剥皮的方法有很多。 :)
-
既然你明白了,为什么不继续为你的问题添加你自己的答案。
-
请注意,您不必循环显示 DGV 中 2 列中的数据 -
myDGV,DataSource = jsonResult会为您完成
标签: json vb.net serialization