如何在c#中使用JavaScriptSerializer来解析具有未知数量的键和值的Json?

时间:2013-03-13 04:43:49

标签: c# asp.net json javascriptserializer

如果我的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; }
}

1 个答案:

答案 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++;
}