Как разобрать детей JSON в VB.NET Newtonsoft


Мне приходится разбирать Json с помощью VB.NET использование Newtonsoft Json.Net библиотека

    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# - или предпочтительно просто перебрать N дочерних узлов для узла CcFull и выдернуть значения для электронной почты и имени и поместить их в общий список.

Кажется, нет ничего хорошего. VB.NET примеры на SO или путем гугления.

C# имеет совершенно простые способы сделать это - но я застрял в VB.NET для этого проекта.

Спасибо, Ребята

1   4   2013-04-13 03:19:36

1 ответ:

Я не эксперт по реализации Linq to JSON в JSON.Net, но это сработало для меня.

Вы почти полностью там. Все, что вам нужно сделать, это немного углубиться в объектную модель.

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. Затем можно использовать имя свойства в качестве индекса для получения значения этого свойства.