将JSON反序列化为LINQ-able集合

时间:2016-03-07 17:03:27

标签: c# json linq

通常,反序列化对我来说不是一个挑战。简单地调用JSON.NET和TADA!但是这种特殊的反序列化被证明是相当困难的。所以基本架构如下:

{"1" : {
    "name" : "Any Offers",
    "stattrak" : "0",
    "star" : "0",
    "souvenir" : "0",
    "sort" : "0",
    "exterior" : "0",
    "quality" : "0",
    "icon" : "",
    "worth" : 0,
    "betable" : 0
},
"2" : {
    "name" : "Real Money",
    "stattrak" : "0",
    "star" : "0",
    "souvenir" : "0",
    "sort" : "0",
    "exterior" : "0",
    "quality" : "0",
    "icon" : "",
    "worth" : 0,
    "betable" : 0
    }
}

现在没有定义一个包含5000+键的MASSIVE类,我走的是:

var schema = JsonConvert.DeserializeObject<Dictionary<string,JToken>>(schemaString);

这为我提供了以下(LINQPad输出):

enter image description here

我如何针对值进行LINQ-ing,例如找到值为&#34;任何优惠&#34;的所有JTokens。我还没有足够的巢穴吗?因为我尝试过以下方面的事情:

schema.Select(x => x.Value.Children().Children().Values().Where(n=>n......))

让我失望:

enter image description here

任何帮助都会很棒。

TL; DR;希望能够使用LINQ搜索集合中的值,并且无法确定方法语法。

2 个答案:

答案 0 :(得分:3)

我会将它反序​​列化为具体类,然后使用linq

public class Entry
{
    public string name { get; set; }
    public string stattrak { get; set; }
    public string star { get; set; }
    public string souvenir { get; set; }
    public string sort { get; set; }
    public string exterior { get; set; }
    public string quality { get; set; }
    public string icon { get; set; }
    public int worth { get; set; }
    public int betable { get; set; }
}

var schema = JsonConvert.DeserializeObject<Dictionary<string,Entry>>(schemaString);

类似于:schema.Values.Where(x=>x.name=="...")

答案 1 :(得分:1)

原来我的整个交易过于复杂。解决方案如下:

schema.Select(x => x.Value["name"]);

由于在LINQPad中嵌套

,这令人困惑