获取对ArrayList对象的访问权限

我正在开发一个应用程序来读取一些JSON数据并进行一些统计,但现在我遇到了一个问题。

我有一个像这样的字符串:

{ "position":[ { "someKey1":"someVal1", "someKey2":"someVal2", }, { "someKey1":"someVal3", "someKey2":"someVal4", } } 

我想访问someKeys和someValues。

我正在将它转换为这样的字典:

 Dictionary values = deserializeJSON(json_string); 

编辑1:对不起,忘了添加deserializeJSON:

 private Dictionary deserializeJSON(string p_jsonObject) { JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Deserialize<Dictionary>(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] 

在这里我很困惑。 我假设它是someKeys和someVals的列表,这应该是正确的,对吗? 现在我已经尝试过,没有运气,可以访问这些值。 我试过arr [0] [“someKey1”],但得到一个错误,我无法将索引应用于’object’。

关于解决方案的任何想法? 理想情况下更优雅的解决方案? 🙂

提前致谢

您可以使用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"] } 

您可以按如下方式访问元素:

LinqPad演示

 var enumerable = (IEnumerable)values["position"]; // Will get you the enumerable ArrayList (Dictionary)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