微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自复杂的 JSON 数据 C# 的 Linq 查询有问题

如何解决来自复杂的 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?