我正在开发一个应用程序来读取一些JSON数据并进行一些统计,但现在我遇到了一个问题。
我有一个这样的字符串:
{
"position":[
{
"someKey1":"someVal1",
"someKey2":"someVal2",
},
{
"someKey1":"someVal3",
"someKey2":"someVal4",
}
}
我想访问someKeys和someValues。
我正在将它转换为这样的词典:
Dictionary<string, object> values = deserializeJSON(json_string);
修改1:抱歉,忘了添加deserializeJSON:
private Dictionary<string, object> deserializeJSON(string p_jsonObject)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Deserialize<Dictionary<string, dynamic>>(p_jsonObject);
}
现在我无法使用键“position”访问值列表。如果我尝试打印值[“位置”]的类型,我得到:
System.Collections.ArrayList
所以我想我可以迭代这个,但我不能。我尝试使用枚举器(在这里读取它可以迭代对象,并且我必须将它添加到ArrayList来转换它):
ArrayList arr = new ArrayList();
IEnumerable enumerable = values["position"] as IEnumerable;
foreach (object element in enumerable)
{
arr.Add(element);
}
当我打印arr [0]时,我得到:
System.Collections.Generic.Dictionary`2[System.String,System.Object]
我很困惑。我假设它是someKey和someVals的列表,这应该是正确的,对吧? 现在我已经尝试过,没有运气,可以访问这些值。我试过arr [0] [“someKey1”],但得到一个错误,我无法将索引应用于'object'。
关于解决方案的任何想法?理想情况下更优雅的解决方案? :)
提前致谢
答案 0 :(得分:3)
您可以使用Linq to JSON(从NuGet添加Newtonsoft的JSON.NET):
JObject jo = JObject.Parse(json);
var value = (string)jo["position"][1]["someKey1"]; // someVal3
另一个样本:
JObject jo = JObject.Parse(json);
JArray positions = (JArray)jo["position"];
foreach (var item in positions)
{
// use (string)item["someKey1"]
// use (string)item["someKey2"]
}
答案 1 :(得分:2)
您可以按如下方式访问元素:
var enumerable = (IEnumerable)values["position"]; // Will get you the enumerable ArrayList
(Dictionary<string,object>)values["position"][0]; // Will get you the First element of the ArrayList
(string)values["position"][0]["someKey1"]; // Will get you someKey1 from the first position of position