通常,反序列化对我来说不是一个挑战。简单地调用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输出):
我如何针对值进行LINQ-ing,例如找到值为&#34;任何优惠&#34;的所有JTokens。我还没有足够的巢穴吗?因为我尝试过以下方面的事情:
schema.Select(x => x.Value.Children().Children().Values().Where(n=>n......))
让我失望:
任何帮助都会很棒。
TL; DR;希望能够使用LINQ搜索集合中的值,并且无法确定方法语法。
答案 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中嵌套
,这令人困惑