C# 如何访问此反序列化数据?

C# 如何访问此反序列化数据?,c#,json.net,C#,Json.net,我正在尝试使用Newtonsoft json.NET解析一些json数据 我可以反序列化数据,但当我尝试使用反序列化数据时,会出现错误“'Newtonsoft.Json.Linq.JArray'不包含'leagueName'的定义” 下面是我想要使用的Json数据 [ { "queueType": "RANKED_SOLO_5x5", "hotStreak": false, "wins": 6, "veteran": false, "losses": 10

我正在尝试使用Newtonsoft json.NET解析一些json数据

我可以反序列化数据,但当我尝试使用反序列化数据时,会出现错误“'Newtonsoft.Json.Linq.JArray'不包含'leagueName'的定义”

下面是我想要使用的Json数据

[
{
    "queueType": "RANKED_SOLO_5x5",
    "hotStreak": false,
    "wins": 6,
    "veteran": false,
    "losses": 10,
    "playerOrTeamId": "39257940",
    "tier": "SILVER",
    "playerOrTeamName": "Kristmas Tree",
    "inactive": false,
    "rank": "V",
    "freshBlood": false,
    "leagueName": "Fizz's Gladiators",
    "leaguePoints": 47
},
{
    "queueType": "RANKED_FLEX_SR",
    "hotStreak": true,
    "wins": 100,
    "veteran": true,
    "losses": 99,
    "playerOrTeamId": "39257940",
    "tier": "SILVER",
    "playerOrTeamName": "Kristmas Tree",
    "inactive": false,
    "rank": "I",
    "freshBlood": false,
    "leagueName": "Xin Zhao's Heralds",
    "leaguePoints": 57
}
]
下面是我打印“hotStreak”的尝试

var json=GetResponse(“https://euw1.api.riotgames.com/lol/league/v3/positions/by-summoner/39257940?api_key=xxxx-xxxx-xxxx-xxxxxxxx”);
MessageBox.Show(json);//给我想要的数据
var callerinfo=JsonConvert.DeserializeObject(json);
var leagueName=callorinfo.leagueName;
MessageBox.Show(联盟名称);
如何访问反序列化的数据?

首先,请注意这是可行的:但是,我不建议这样做:

var summonerInfo = JsonConvert.DeserializeObject<dynamic>(json);
foreach(var item in summonerInfo)
{
    Console.WriteLine(item.leagueName);
}
现在反序列化为该类型—在您的示例中,是一个列表或数组(JSON中的根对象是一个JSON数组(
[…]
),而不是JSON对象(
{…}
):

var-callerinfo=JsonConvert.DeserializeObject(json);
foreach(召唤信息中的变量项)
{
控制台。写入线(项目。联盟名称);
}

您可以使用
dynamic
进行操作,但这比简单地定义一个类型要复杂得多。

如果您想反序列化为强类型,可能会重复此操作。非常有效,谢谢!然而,我不确定我是否理解它是如何工作的。在本例中,召唤者信息是来自类(在本例中我称之为召唤者)的对象列表,以匹配JSON吗?@FastCow您在问什么?第一个,还是第二个?第二个正是您所说的——与JSON形状匹配的对象列表。第一种方法使用JSON.NET的
动态
API,它可以工作,但只会对您造成伤害:正确操作要困难得多,而且在运行时成本要高得多。
var summonerInfo = JsonConvert.DeserializeObject<dynamic>(json);
foreach(var item in summonerInfo)
{
    Console.WriteLine(item.leagueName);
}
class WhateverThisIs // rename me!
{
    public string QueueType { get; set; }
    public bool HotStreak { get; set; }
    public int Wins { get; set; }
    // ...
    public string LeagueName { get; set; }
    public int LeagueWins { get; set; }
}
var summonerInfo = JsonConvert.DeserializeObject<List<WhateverThisIs>>(json);
foreach(var item in summonerInfo)
{
    Console.WriteLine(item.LeagueName);
}