Cha*_*lez 5 vb.net json json.net
我正在使用Newtonsoft Json.Net库使用VB.NET对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"
}
}
Run Code Online (Sandbox Code Playgroud)
我可以得到一个有效的JObject:
Dim o As JObject = JObject.Parse(strJson)
Run Code Online (Sandbox Code Playgroud)
然后我可以获取JTokens的列表并迭代它们并轻松获取根项值 - 但是如何获取CcFull的Child记录?
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
Run Code Online (Sandbox Code Playgroud)
看起来我可能能够使用JArray或解析item.value - 但语法使我无法理解.
我不想在VB中设置一个完整的强类型模型并进行自动反序列化 - 更喜欢在C#中执行它的动态方式 - 或者最好只为CcFull节点迭代n个子节点并为电子邮件取出值和名称,并将它们放在通用列表中.
似乎SO或Googling上没有好的VB.NET示例.
C#有很简单的方法可以做到这一点 - 但是我在这个项目中遇到了VB.NET.
谢谢伙计们
我不是 JSON.Net 中 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
Run Code Online (Sandbox Code Playgroud)
正如您所指出的,您从结果列表中获得的项目具有子项目。该子项具有一系列值 - 由 JSON 字符串中的括号表示的数组。该Values方法是一个 IEnumerable,因此我们可以对其进行迭代,从每次迭代中接收一个 JObject。该对象表示 CcFull 数组中的单个条目。然后,您可以使用属性名称作为索引来检索该属性的值。
| 归档时间: |
|
| 查看次数: |
19016 次 |
| 最近记录: |