我使用VB解析Json有困难。. NET使用Newtonsoft Json。网络图书馆
Json Data
---------
{
"CC": "sample.cc@emailDomain.com",
"CcFull": [
{
"Email": "sample.cc@emailDomain.com",
"Name": "John Sample"
},
{
"Email": "another.cc@emailDomain.com",
"Name": "Mike Sample"
}
],
"FromFull" : {
"Email": "myUser@theirDomain.com",
"Name": "John Doe"
}
}
我可以得到一个有效的JObject:
Dim o As JObject = JObject.Parse(strJson)
然后我可以得到一个JTokens列表,并通过它们迭代,很容易得到根项目值-但如何得到CcFull的子记录?
Dim results As List(Of JToken) = o.Children().ToList
For Each item As JProperty In results
item.CreateReader()
Select Case item.Name
Case "CC"
dim strCC = item.Value.ToString
Case "CcFull"
'This has children (Email and Name)
End Select
Next
似乎我可以使用JArray或解析项目。值-但是语法不明白。
我不想在VB中建立一个完整的强类型模型并进行自动反序列化-更喜欢c#中的动态方式-或者最好只是迭代CcFull节点的n子节点并取出Email和Name的值并将它们放入通用列表中。
似乎没有好的VB。. NET示例:
c#有完全简单的方法来做到这一点-但我被困在VB。. NET谢谢人
我不是JSON中Linq to JSON实现方面的专家。,但这对我有效。
你已经差不多到了。您所需要做的就是在对象模型中再深入一点。
Dim results As List(Of JToken) = o.Children().ToList
For Each item As JProperty In results
item.CreateReader()
Select Case item.Name
Case "CC"
Dim strCC = item.Value.ToString
Case "CcFull"
Dim strEmail As String
Dim strName As String
For Each subitem As JObject In item.Values
strEmail = subitem("Email")
strName = subitem("Name")
Next
End Select
Next
您从结果列表中得到的项有子项,正如您所注意到的。该子项具有一系列值——JSON字符串中用括号表示的数组。该Values
方法是一个IEnumerable,因此我们可以遍历它,从每次迭代中接收一个JObject。该对象表示CcFull数组中的单个条目。然后,您可以使用属性名作为索引来检索该属性的值。