C# 将JSON反序列化为可LINQ的集合

C# 将JSON反序列化为可LINQ的集合,c#,json,linq,C#,Json,Linq,通常,反序列化对我来说不是一个挑战。简单调用JSON.NET和TADA!但事实证明,这种特殊的反序列化相当困难。因此,基本模式如下所示: {"1" : { "name" : "Any Offers", "stattrak" : "0", "star" : "0", "souvenir" : "0", "sort" : "0", "exterior" : "0", "quality" : "0", "icon" : "", "

通常,反序列化对我来说不是一个挑战。简单调用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多个键的大型类的情况下,我选择了以下路线:

var schema = JsonConvert.DeserializeObject<Dictionary<string,JToken>>(schemaString);
这给我留下了:

任何帮助都是狂热的


TL;博士希望能够使用LINQ搜索集合中的值,但无法找到执行此操作的方法语法。

我会将其反序列化为一个具体的类,然后使用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);
公共类条目
{
公共字符串名称{get;set;}
公共字符串stattrak{get;set;}
公共字符串星号{get;set;}
公共字符串纪念品{get;set;}
公共字符串排序{get;set;}
公共字符串外部{get;set;}
公共字符串质量{get;set;}
公共字符串图标{get;set;}
公共整数值{get;set;}
公共int betable{get;set;}
}
var schema=JsonConvert.DeserializeObject(schemaString);

类似于:
schema.Values.Where(x=>x.name==“…”)
我会将它反序列化为一个具体的类,然后使用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);
公共类条目
{
公共字符串名称{get;set;}
公共字符串stattrak{get;set;}
公共字符串星号{get;set;}
公共字符串纪念品{get;set;}
公共字符串排序{get;set;}
公共字符串外部{get;set;}
公共字符串质量{get;set;}
公共字符串图标{get;set;}
公共整数值{get;set;}
公共int betable{get;set;}
}
var schema=JsonConvert.DeserializeObject(schemaString);

类似于:
schema.Values.Where(x=>x.name==“…”)

结果是我把整个交易复杂化了。解决办法如下:

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

这让人困惑,因为LINQPad中的嵌套结果是我使整个交易过于复杂化了。解决办法如下:

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

由于LINQPad中的嵌套,这让人困惑

我看不到您字典中的项有5000个属性。即使它们是,您也可以将所有内容反序列化为
字典
,这很容易“LINQable”,尽管不是很安全。我看不到您字典中的项有5000个属性。即使它们是,您也可以将所有内容反序列化为
字典
,这很容易实现“LINQable”,尽管不是非常安全的类型。工作完美无瑕。我之所以使用
字典
,是因为在类中使用
[JsonExtensionData]
时需要使用字典,而直接反序列化到该类型时则不需要。谢谢:)工作完美无瑕。我之所以使用
字典
,是因为在类中使用
[JsonExtensionData]
时需要使用字典,而直接反序列化到该类型时则不需要。谢谢:)