如何解决来自复杂的 JSON 数据 C# 的 Linq 查询有问题
我正在尝试从 NBA API 查询 JSON 数据以创建列表,以便我可以将范围添加到我的数据库中 .SelectMany
语句仅返回一个变量 我没有构建错误但在运行代码时遇到错误.我相信错误在于我的陈述,但我不确定。我似乎无法在 google 上找到答案。
感谢任何帮助我正在用这个拉我的头发。附件是我的 Linq 查询、JSON 数据和游戏类。
Linq 查询:
var json = response.Content;
JObject jObject = JObject.Parse(json);
List<Game> games = (from g in jObject["api"]["games"]
select new Game(
(int)g["gameId"],(string)g["startTimeUTC"],null,(int)g["hTeam"]["teamId"],(int)g["vTeam"]["teamId"],(int)g["hTeam"]["score"]["points"],// getting error here "input string invalid"
(int)g["vTeam"]["score"]["points"])).ToList();
JSON 数据
{"api":{"status":200,"message":"GET games\/seasonYear\/2020","results":1168,"filters":["seasonYear","league","gameId","teamId","date","live"],"games":[{"seasonYear":"2020","league":"standard","gameId":"8133","startTimeUTC":"2020-12-12T00:00:00.000Z","endTimeUTC":"2020-12-12T02:29:00.000Z","arena":"State Farm Arena","city":"Atlanta","country":"USA","clock":"","gameDuration":"2:19","currentPeriod":"4\/4","halftime":"0","EndOfPeriod":"0","seasonStage":"1","statusShortGame":"3","statusGame":"Finished","vTeam":{"teamId":"26","shortName":"ORL","fullName":"Orlando Magic","nickName":"Magic","logo":"https:\/\/upload.wikimedia.org\/wikipedia\/fr\/b\/bd\/Orlando_Magic_logo_2010.png","score":{"points":"116"}},"hTeam":{"teamId":"1","shortName":"ATL","fullName":"Atlanta Hawks","nickName":"Hawks","logo":"https:\/\/upload.wikimedia.org\/wikipedia\/fr\/e\/ee\/Hawks_2016.png","score":{"points":"112"}}},{"seasonYear":"2020","gameId":"8134","endTimeUTC":"2020-12-12T02:32:00.000Z","arena":"Little Caesars Arena","city":"Detroit","vTeam":{"teamId":"24","shortName":"NYK","fullName":"New York Knicks","nickName":"Knicks","logo":"https:\/\/upload.wikimedia.org\/wikipedia\/fr\/d\/dc\/NY_Knicks_logo_2011.png","score":{"points":"90"}},"hTeam":{"teamId":"10","shortName":"DET","fullName":"Detroit Pistons","nickName":"Pistons","logo":"https:\/\/upload.wikimedia.org\/wikipedia\/en\/thumb\/1\/1e\/Detroit_Pistons_logo.svg\/1200px-Detroit_Pistons_logo.svg.png","score":{"points":"84"}}},"gameId":"8135","startTimeUTC":"2020-12-12T01:00:00.000Z","endTimeUTC":"2020-12-12T03:23:00.000Z","arena":"United Center","city":"Chicago","gameDuration":"2:09","vTeam":{"teamId":"14","shortName":"HOU","fullName":"Houston Rockets","nickName":"Rockets","logo":"https:\/\/upload.wikimedia.org\/wikipedia\/fr\/thumb\/d\/de\/Houston_Rockets_logo_2003.png\/330px-Houston_Rockets_logo_2003.png","score":{"points":"125"}},"hTeam":{"teamId":"6","shortName":"CHI","fullName":"Chicago Bulls","nickName":"Bulls","logo":"https:\/\/upload.wikimedia.org\/wikipedia\/fr\/thumb\/d\/d1\/Bulls_de_Chicago_logo.svg\/1200px-Bulls_de_Chicago_logo.svg.png","score":{"points":"104"}}}]}}
游戏类
public class Game
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.None)]
[JsonProperty(PropertyName = "gameId")]
public int GameID { get; set; }
[required]
[JsonProperty(PropertyName = "startTimeUTC")]
public DateTime Date { get; set; }
public bool? Favorite { get; set; }
[JsonProperty(PropertyName = "api/games/hTeam/score/points")]
public int Homescore { get; set; }
[JsonProperty(PropertyName = "api/games/vTeam/score/points")]
public int Awayscore { get; set; }
public int Totalscore
{
get
{ return (Homescore + Awayscore); }
}
[required]
[JsonProperty(PropertyName = "api/games/hTeam/teamId")]
public int HomeID { get; set; }
[NotMapped]
[ForeignKey("HomeID")]
public Team HomeTeam {get; set;}
[required]
[JsonProperty(PropertyName = "api/games/vTeam/teamId")]
public int AwayID { get; set; }
[NotMapped]
[ForeignKey("AwayID")]
public Team AwayTeam { get; set; }
public List<GameBet> GameBet { get; set; }
public List<PlayerGame> PlayerGame { get; set; }
public Game(int gameId,DateTime date,bool? favorite,int homeID,int awayID,int homescore,int awayscore)
{
this.GameID = gameId;
this.Date = date;
this.Favorite = favorite;
this.Homescore = homescore;
this.Awayscore = awayscore;
this.HomeID = homeID;
this.AwayID = awayID;
this.GameBet = new List<GameBet>();
this.PlayerGame = new List<PlayerGame>();
}
public Game() { }
}
解决方法
似乎该类与 json 字符串不匹配。
我生成了一组与您的 json 字符串匹配的类。您可以根据需要查找 here 并添加属性。
然后,您可以使用类型化的类而不是使用 Jobject
来访问游戏和得分。
示例:
var rootObject = JsonConvert.DeserializeObject<Rootobject>(json);
var games = rootObject.api.games;
foreach (var g in games)
{
var score = g.vTeam.score.points;
Console.WriteLine($"{g.city} {score}");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。