2014-09-05 3 views
1

Мне тяжело повторять простой JSON, который у меня есть. Я сделал это легко в Javascript, но не могу заставить его работать с json.net в C#. Это мой JSON:Итерация json от определенного ключа

{ 
    "term0":{ 
     "id":"2131sd0", 
     "senses":{ 
     "0":{ 
      "synonyms":{ 
       "0":{ 
        "synonym":"that", 
        "context":"" 
       }, 
       "1":{ 
        "synonym":"the indicated", 
        "context":"" 
       }, 
       "2":{ 
        "synonym":"the present", 
        "context":"" 
       }, 
       "3":{ 
        "synonym":"aforementioned", 
        "context":"" 
       } 
      } 
     } 
     } 
    }, 
    "term1":{ 
     "id":"2131sd1", 
     "senses":{ 
     "0":{ 
      "synonyms":{ 
       "0":{ 
        "synonym":"the one", 
        "context":"" 
       }, 
       "1":{ 
        "synonym":"this one", 
        "context":"" 
       }, 
       "2":{ 
        "synonym":"the one in question", 
        "context":"" 
       } 
      } 
     } 
     } 
    } 
} 

И это мой C#:

JObject rootObject = JObject.Parse(jsonText); 
foreach(dynamic a in rootObject.SelectToken("term0")["senses"]["0"]["synonyms"]) 
{ 
    Debug.WriteLine(a["synonym"]); 
} 

, который рушится. Что мне не хватает?

спасибо.

Ошибка:

A first chance exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Microsoft.CSharp.dll A first chance exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll Additional information: Cannot dynamically invoke method 'WriteLine' because it has a Conditional attribute

+1

'который рушится' Сбой с чем? Какое сообщение об ошибке вы получаете? Поместите это в свой вопрос. –

+0

Когда я пытаюсь это сделать, я получаю 'InvalidOperationException' с сообщением:' Не могу получить доступ к дочернему значению в Newtonsoft.Json.Linq.JProperty.' –

+2

@MattBurland. Я тоже получил это. Вы должны называть 'a.First [" синоним "]', и тогда вы получите исключение, которое он описал. –

ответ

3

Это динамичный, поэтому мы привести его к объекту, а затем вызвать метод ToString(). Например:

Debug.WriteLine(((object)a.First["synonym"]).ToString()); 
+0

Я получаю сообщение «Не могу получить доступ к дочернему значению на Newtonsoft.Json.Linq.JProperty». error – Cornwell

+2

Как указывал @ByteBlast, это должно быть 'Debug.WriteLine (((object) a.First [" синоним "]). ToString());' –

+0

@MattBurland ok, thanks. Наверное, я должен был ее протестировать. – Donal