如果我的Json字符串包含未知数量的键和值。如何在c#中获取数组或对象的所有值?
在下面的例子中,我知道有“id”和“index”字段。如果我不知道该领域的钥匙怎么办?
在另一个上下文中,如果键的数量很大,那么我不能声明变量怎么办?
[{"id":"449342","index":0},{"id":"449343","index":1}]
我像这样反序化上面的Json。上面提到的两种情况怎么样?
JavaScriptSerializer js = new JavaScriptSerializer();
AllLiTags[] Tags = js.Deserialize<AllLiTags[]>(LiOrder);
public class AllLiTags
{
public string Id { get; set; }
public string Index { get; set; }
}
答案 0 :(得分:1)
要么反序列化为字典,要么抓取nuget包Json.NET,(documentation),这更倾向于这种用法。
反序列化为字典看起来像:
var tags = js.Deserialize<Dictionary<string, string>[]>(LiOrder);
string secondOrderIndex = tags[1]["index"];
你会丢失类型信息(转换为字符串的数字等),我怀疑它会处理嵌套对象。
使用Json.NET看起来像:
var tags = JArray.Parse(LiOrder);
string secondOrderIndex = tags[1]["index"].GetValue<string>();
int idx = 0;
foreach (var order in tags) {
foreach (var prop in order) {
Console.WriteLine("Order {0}'s {1} property has value {2}",
idx,
prop.Name,
prop.Value.ToString());
}
idx++;
}