C# 使用LINQ解析JSON

C# 使用LINQ解析JSON,c#,json.net,C#,Json.net,我的json数据如下所示 { "data":{ "foo":{ "sfoo":"1", "active":1 }, "foo":{ "sfoo":"2", "active":0 }, "v":"v1" } } 我尝试使用以下代码从json获取值: JObject _JObject = JObject.Parse(_JsonString); var _

我的json数据如下所示

{
   "data":{
      "foo":{
         "sfoo":"1",
         "active":1
      },
      "foo":{
         "sfoo":"2",
         "active":0
      },
      "v":"v1"
   }
}
我尝试使用以下代码从json获取值:

JObject _JObject = JObject.Parse(_JsonString);

var _JItems = _JObject.SelectToken("data[0].foo")
            .Select(s => new
            {
                _Sfoo = (string)s.SelectToken("sfoo"),
                _WhereClause = (string)s.SelectToken("active")
            })
    .Where(w => w._WhereClause == "1");

foreach (var _JItem in _JItems)
{
    MessageBox.Show(_JItem._Sfoo.ToString());
}
我收到一个错误,如“附加信息:值不能为空。”


提前谢谢。

正如我所评论的,
数据是一个对象(
{}
),而不是数组(
[]
)。您看到一个错误,因为对象
data
没有定义属性
0

您似乎希望JSON看起来像这样:

{
   "data":{
      "foo":[
         {
            "sfoo":"1",
            "active":1
         },
         {
            "sfoo":"2",
            "active":0
         }
      ],
      "v":"v1"
   }
}
然后您的解析代码将如下所示:

var _JItems = _JObject.SelectToken("data.foo")
        .Select(s => new
        {
            _Sfoo = (string)s.SelectToken("sfoo"),
            _WhereClause = (string)s.SelectToken("active")

        })
        .Where(w => w._WhereClause == "1");

data
不是数组,对象
data
的第一个
foo
属性将被第二个
foo
属性覆盖。也许你想让
数据
成为一个数组?谢谢,但当我检查这个url@Kerberos时,它似乎是有效的。根据你的意图,语法正确与正确之间存在差异。@Kerberos:正如iamkrillin所说,你的JSON是有效的,你只是没有正确访问它。