我有一个字符串,其中包含一个字典数组的字符串。
格式的一个例子是:
[{"id":1,"items":[5,8]},{"id":2,"items":[6]},{"id":3,"items":[7]}]
(注意:以上所有代码都是字符串)
所以这里是一个字典数组的字符串,它有两个键,第一个键的值是一个数字,第二个键的值是一个数字数组。
使用c#(开箱即用的程序集),我如何遍历所有id值,然后遍历所有项目数组值。
所以我希望像一个双循环。一个迭代id并提取数字,然后对于每次迭代,它需要迭代items数组的所有值。
有谁知道如何解析和提取数字?
感谢。
输出就像(例如)
1
5 8
2
6
3
7
修改
我试过了:
string dataString = JSONValue.Text;
JavaScriptSerializer jss = new JavaScriptSerializer();
var json = new JavaScriptSerializer();
var data = json.Deserialize<List<Dictionary<string, Object>>>(dataString);
int sectionID;
List<int> itemIDS;
foreach (Dictionary<string, Object> dict in data)
{
sectionID = (int)dict["id"];
itemIDS = (List<int>)dict["items"];
ReportObject.log(sectionID.ToString());
foreach (int itemID in itemIDS)
{
ReportObject.log(itemID.ToString());
}
}
但我正在
(6/27/2013 12:02:04 AM) - Error Message: Unable to cast object of type 'System.Collections.ArrayList' to type 'System.Collections.Generic.List`1[System.Int32]'.
答案 0 :(得分:2)
试试这个
using using System.Web.Script.Serialization;
var jsonStr = "[{\"id\":1,\"items\":[5,8]},{\"id\":2,\"items\":[6]},{\"id\":3,\"items\":[7]}]";
var json = new JavaScriptSerializer();
var data = json.Deserialize<List<dynamic>>(jsonStr);
这将生成一个包含两个属性id
和items
的动态对象列表,然后您可以遍历该列表并检索所需的信息。
dynamic
关键字仅适用于.net 4.0或更高版本。否则,您可以使用以下选项。
创建一个这样的类
public class Info{
public int Id { get; set; }
public int[] Items { get; set; }
}
然后var data = json.Deserialize<List<Info>>(jsonStr);
答案 1 :(得分:0)
尝试获取string的int值,如果它是一个数组,请专门获取索引上的对象并尝试ToInt()
或将字符串对象强制转换为int。它可以两种方式完成。