C# 从列表中获取每个项目,并将其与不同的项目进行比较
我有一段代码,它应该从JSON中获取项目名称,然后将其与价目表进行比较。如果名称在那里,那么它将找到价格并将其添加到listview中。问题是,如果我试图在那里添加foreach循环,那么它会抛出一个错误。这是我的密码: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() .
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;
};