C# 如何访问此反序列化数据?
我正在尝试使用Newtonsoft json.NET解析一些json数据 我可以反序列化数据,但当我尝试使用反序列化数据时,会出现错误“'Newtonsoft.Json.Linq.JArray'不包含'leagueName'的定义” 下面是我想要使用的Json数据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
[
{
"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);
}