在C#中使用json.net的JObject.Parse键/值

时间:2016-02-01 21:14:21

标签: c# json vb.net json.net

嘿,我有以下代码:

try {
  foreach (var x1 in JObject.Parse(json1)) {
     string name = x1.Key;
     JToken value = x1.Value;

上述代码没有明显错误。但是,一旦我运行应用程序,它就会出现错误并说:

  

'Newtonsoft.Json.Linq.JProperty'不包含'Key'的定义

所以这里发生了什么。我的VB.net代码与上面的代码类似:

Try
    For Each x1 In JObject.Parse(json1)
       Dim name As String = x1.Key
       Dim value As JToken = x1.Value

1 个答案:

答案 0 :(得分:1)

JProperty(通过迭代JObject获得JPropertys)继承自JContainer,继承自JTokenJToken实施IDynamicMetaObjectProvider

这使它基本上成为dynamic对象,允许您在编译时访问它上面的任何内容。这就是你没有得到编译器错误的原因。

在运行时,DLR发现Key上没有x1属性并抛出该异常。

如果您想获取属性名称,则应使用Name属性。

foreach (var x1 in JObject.Parse(json1)) {
    string name = x1.Name;
    JToken value = x1.Value;