从某个键中迭代json

时间:2014-09-05 17:13:43

标签: c# json json.net

我很难迭代一个简单的JSON。我已经在Javascript中轻松完成了,但无法在C#中使用json.net。 这是我的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"]);
}

正在崩溃。我错过了什么?

谢谢。

错误:

  

类型的第一次机会异常   发生了'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'   Microsoft.CSharp.dll类型的第一次机会异常   发生了'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'   System.Core.dll类型的未处理异常   发生了'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'   System.Core.dll   附加信息:无法动态调用   方法'WriteLine',因为它具有条件属性

1 个答案:

答案 0 :(得分:3)

它是动态的,所以我们将它转​​换为一个对象,然后调用ToString()方法。例如:

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