C# 从列表中获取每个项目,并将其与不同的项目进行比较

C# 从列表中获取每个项目,并将其与不同的项目进行比较,c#,json,linq,C#,Json,Linq,我有一段代码,它应该从JSON中获取项目名称,然后将其与价目表进行比较。如果名称在那里,那么它将找到价格并将其添加到listview中。问题是,如果我试图在那里添加foreach循环,那么它会抛出一个错误。这是我的密码: JObject tokenJson2 = JObject.Parse(json2); foreach (var data2 in tokenJson2["response"]) { var item = data2.ToArray() .

我有一段代码,它应该从JSON中获取项目名称,然后将其与价目表进行比较。如果名称在那里,那么它将找到价格并将其添加到listview中。问题是,如果我试图在那里添加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”


以下是标记JSON2数据:

如果您的json采用这种样式

{"NameCol"="N1", "response" : [{"price":"22"}, {"price":24}, ..... {....}]
我正在使用Newtonsoft库来实现这一目的。循环中的每个
data2
将包含单个对象,如
{“price”:“22”}

foreach(Newtonsoft.Json.Linq.JArray中的var data2)tokenJson2[“response”])
{
字符串名称=”;
if(tokenJson2.TryParseValue(“NameCol”,name))
{
字符串NameFromJSON=“”;
//此行将{“price”:“22}转换为dictionary
字典数据2_dict=
反序列化对象(data2.ToString());
如果(数据2_dict[“name”]==name)
{
//在这里做点什么
}   
}          
}

u可以使用SelectTokens

        JToken[] tokens = tokenJson2.SelectTokens(string.Format("response.{0}", name)).ToArray();
        Array.ForEach<JToken>(tokens, (token) => {
            //DoSomething 
        });
JToken[]tokens=tokenJson2.SelectTokens(string.Format(“response.{0}”,name)).ToArray();
Array.ForEach(令牌,(令牌)=>{
//剂量
});
根据您(某种不同寻常的)JSON结构,“response”是一个
JProperty
,其值为
JObject
,包含多个
JProperty
元素,名称为
JProperty.name
,值为
JObject
,属性为“price”和“quantity”

可以通过以下方式进行迭代:

var response = (JObject)tokenJson2.Property("response").Value;
foreach (var item in response.Properties())
{
    var name = item.Name;
    var data = (JObject)item.Value;
};

也许你可以添加一个示例Json字符串。你可以给我一个建议,在哪里上传它?json2的内容就足够了。如果它太大/太长,一个示例条目就足够了,你可以在问题下发布。我能够找到我获取它的链接。对我来说,它说它在转换字典时有问题。你可以将它转换为具有匹配属性的相关对象。抱歉,但我不确定你的意思是什么?下面是完整的错误:将值“AK-47 |海蓝宝石复仇(战痕)”转换为类型“System.Collections.Generic.Dictionary`2[System.String,System.Object]”时出错。路径“”,第1行,位置45。我希望您的jSon为
[{“name”:“N1”,“price”:“22”},{“name”:“N2”,“price”:24},{……}]
。上面的代码可以将这个jSon转换成字典。项目名称位于根对象中。嘿,嗯,我无法让您的代码正常工作?错误如下:附加信息:解析路径时出现意外字符:我无法打开json链接。你能放在这儿吗?我打不开。我在proxyOh我不能把它放在这里因为它太大了
var response = (JObject)tokenJson2.Property("response").Value;
foreach (var item in response.Properties())
{
    var name = item.Name;
    var data = (JObject)item.Value;
};