我正在使用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" } }
我可以得到一个有效的JObject:
Dim o As JObject = JObject.Parse(strJson)
然后我可以获取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
看起来我可以使用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
如您所述,您从结果列表中获得的项目包含子项目.该子项具有一系列值 – 由JSON字符串中的括号表示的数组.那个Values方法是一个IEnumerable,所以我们可以迭代它,从每次迭代接收一个JObject.该对象表示CcFull数组中的单个条目.然后,您可以使用属性名称作为索引来检索该属性的值.