我有一段代码,应该从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
答案 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)
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