使用LINQ请求从JSON字符串中提取数据

时间:2017-12-27 19:55:17

标签: json vb.net linq json.net

我有一个带有以下组织的JSON字符串中的数据(为了给你一个例子,我已经格式化了一行)

Tuple2[A, B]

我使用以下课程:

[
   {
    "id": 60237,
    "categories": [
       { "name": "name1" },
       { "name": "name2" }]
   }
]

我使用JSON.NET

进行了反序列化
Public Class Entry
   Public Property Id As Integer
   Public Property Categories As Category()
End Class

Public Class Category
   Public Property Name As String
End Class

希望使用LINQ请求从JSON字符串中提取“categories”字段中包含已定义类别名称列表的数据。 例如,我想提取每一行""类别名称为" name1"和" name2"。列表可以采用以下形式:dim desiredcategories = {" name1"," Name2"}

注意:类别的名称不是由我定义的,可以更改。但是,即使其他类别更改或添加或删除,Name1和Name2也保持不变。

您能帮我在VB .NET中将“where”行写入以下请求吗?

Dim entries() As Entry = JsonConvert.DeserializeObject(Of Entry())(JSONSTRING)

注意:为了简化帖子,我没有把其他元素放在JSON字符串和其他类中以及其他类中"其中"在同一请求中的行。

1 个答案:

答案 0 :(得分:1)

将所需的类别名称保留在列表中:

Dim list As New List(Of String)
list.Add("name1")
list.Add("name2")

然后,您可以使用以下代码根据所需类别进行过滤:

Dim entries as new List(of Entry)

Dim entry1 as new Entry()
entry1.Id = 60237

Dim category1 as new Category()
category1.Name = "name1"
Dim category2 as new Category()
category2.Name = "name2"

Dim c as new List(of Category)

c.Add(category1)
c.Add(category2)

entry1.Categories = c.ToArray()

entries.Add(entry1)

Dim list As New List(Of String)
list.Add("name1")
list.Add("name2")

Dim requestanswer =(From entry In entries Where(From category In entry.Categories Where list.Contains(category.Name)).Count() > 0 select entry).ToList()

for each ra as Entry in requestanswer
    Console.WriteLine(ra.id)
next