从列表中获取每个项目并将其与另一个项目进行比较

时间:2017-02-28 10:20:54

标签: c# json linq

我有一段代码,应该从JSON中获取项目名称,然后将其与价目表进行比较。如果名称在那里,它将找到价格并将其添加到列表视图。问题是如果我试图在那里添加一个foreach循环,那么它会抛出一个错误。这是我的代码:

JObject tokenJson2 = JObject.Parse(json2);
foreach (var data2 in tokenJson2["response"])
{
  var item = data2.ToArray()
                  .SingleOrDefault(x => ((JProperty)x).Name == name.ToString()) as JProperty;

  if (item != null)
  { 
   //DoSomething 
  }
}

这是我得到的错误:

  

无法将类型为“Newtonsoft.Json.Linq.JObject”的对象强制转换为类型   'Newtonsoft.Json.Linq.JProperty'。

这是tokenJson2数据:Link

3 个答案:

答案 0 :(得分:0)

如果你的json是这种风格

{"NameCol"="N1", "response" : [{"price":"22"}, {"price":24}, ..... {....}]

我正在使用Newtonsoft库来实现此目的。循环中的每个data2都将包含单个对象,例如{"price":"22"}

foreach (var data2 in (Newtonsoft.Json.Linq.JArray)tokenJson2["response"])
{
      string name = "";
      if(tokenJson2.TryParseValue("NameCol", name))
      {
        string NameFromJSON ="";
        //This line will convert {"price":"22"} to dictionary
        Dictionary<string, object> data2_dict = 
             JsonConvert.DeserializeObject<Dictionary<string, object>>(data2.ToString());
        if(data2_dict["name"] == name)
        {
             //DO SOME THING HERE
        }   
      }          
 }

答案 1 :(得分:0)

你可以使用SelectTokens ..

        JToken[] tokens = tokenJson2.SelectTokens(string.Format("response.{0}", name)).ToArray();
        Array.ForEach<JToken>(tokens, (token) => {
            //DoSomething 
        });

答案 2 :(得分:0)

根据您的(不寻常的)JSON结构,“响应”是JProperty,其值为JObject,包含多个JProperty元素,其名称为{{1} }和值为JProperty.Name的“价格”和“数量”属性。

可以这样迭代:

JObject