首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API调用期间无法反序列化当前JSON数组

API调用期间无法反序列化当前JSON数组
EN

Stack Overflow用户
提问于 2020-04-04 23:25:11
回答 2查看 38关注 0票数 0

我在学习如何使用API时遇到了这样的错误:“无法将当前的JSON数组(例如1,2,3)反序列化为'NbaApi.Models.Standard‘类型,因为该类型需要一个JSON对象(例如{"name":"value"})才能正确反序列化。提前谢谢你!

我有这个json

代码语言:javascript
复制
{
  "_internal": {
    "pubDateTime": "2020-04-03 13:11:16.692 EDT",
    "igorPath": "S3,1585933850069,1585933857347|router,1585933857347,1585933857352|domUpdater,1585933857484,1585933875507|feedProducer,1585933875618,1585933885453",
    "xslt": "NBA/xsl/league/roster/marty_active_players.xsl",
    "xsltForceRecompile": "true",
    "xsltInCache": "false",
    "xsltCompileTimeMillis": "253",
    "xsltTransformTimeMillis": "7800",
    "consolidatedDomKey": "prod__transform__marty_active_players__1989425396229",
    "endToEndTimeMillis": "35384"
  },
  "league": {
    "standard": [
      {
        "firstName": "Steven",
        "lastName": "Adams",
        "temporaryDisplayName": "Adams, Steven",
        "personId": "203500",
        "teamId": "1610612760",
        "jersey": "12",
        "isActive": true,
        "pos": "C",
        "heightFeet": "6",
        "heightInches": "11",
        "heightMeters": "2.11",
        "weightPounds": "265",
        "weightKilograms": "120.2",
        "dateOfBirthUTC": "1993-07-20",
        "teamSitesOnly": {
          "playerCode": "steven_adams",
          "posFull": "Center",
          "displayAffiliation": "Pittsburgh/New Zealand",
          "freeAgentCode": ""
        },
        "teams": [
          {
            "teamId": "1610612760",
            "seasonStart": "2013",
            "seasonEnd": "2019"
          }
        ],
        "draft": {
          "teamId": "1610612760",
          "pickNum": "12",
          "roundNum": "1",
          "seasonYear": "2013"
        },
        "nbaDebutYear": "2013",
        "yearsPro": "6",
        "collegeName": "Pittsburgh",
        "lastAffiliation": "Pittsburgh/New Zealand",
        "country": "New Zealand"
      }
    ]
  }
}

我有这些模型类

代码语言:javascript
复制
public class Data
    {
        public League League { get; set; }
    }

    public class League
    {
        public Standard Standard { get; set; }
    }
    public class Standard
    {
        public List<Player> players { get; set; }
    }
    public class Player
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        //other parameters are also in the model
    }

我使用此方法来使用api并将其传递给模型

代码语言:javascript
复制
   class Program
    {
        static void Main(string[] args)
        {
            var data = new List<Data>();
            Player player = new Player();

            using (var client = new HttpClient())
            {


                client.BaseAddress = new Uri("http://data.nba.net/10s/prod/v1/2019/players.json");
                //HTTP GET
                var responseTask = client.GetAsync("");
                responseTask.Wait();

                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    var readTask = result.Content.ReadAsAsync<List<Data>>();
                    readTask.Wait();

                    data = readTask.Result;
                    foreach (var item in data)
                    {
                        var league = item.League;
                        var standard = league.Standard;
                        var players = standard.players;
                        player = players.Where(p => p.LastName == "Adams").First();
                    }

                }
                else
                {
                    throw new Exception(result.ReasonPhrase);
                }
            }
            Console.WriteLine(player.LastName);

            Console.ReadLine();
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2020-04-05 12:44:20

您需要更改您的模型,如下所示

代码语言:javascript
复制
public class TeamSitesOnly
{
    public string playerCode { get; set; }
    public string posFull { get; set; }
    public string displayAffiliation { get; set; }
    public string freeAgentCode { get; set; }
}

public class Team
{
    public string teamId { get; set; }
    public string seasonStart { get; set; }
    public string seasonEnd { get; set; }
}

public class Draft
{
    public string teamId { get; set; }
    public string pickNum { get; set; }
    public string roundNum { get; set; }
    public string seasonYear { get; set; }
}

public class Standard
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string temporaryDisplayName { get; set; }
    public string personId { get; set; }
    public string teamId { get; set; }
    public string jersey { get; set; }
    public bool isActive { get; set; }
    public string pos { get; set; }
    public string heightFeet { get; set; }
    public string heightInches { get; set; }
    public string heightMeters { get; set; }
    public string weightPounds { get; set; }
    public string weightKilograms { get; set; }
    public string dateOfBirthUTC { get; set; }
    public TeamSitesOnly teamSitesOnly { get; set; }
    public List<Team> teams { get; set; }
    public Draft draft { get; set; }
    public string nbaDebutYear { get; set; }
    public string yearsPro { get; set; }
    public string collegeName { get; set; }
    public string lastAffiliation { get; set; }
    public string country { get; set; }
}

public class League
{
    public List<Standard> standard { get; set; }
}

public class Data
{
    public League league { get; set; }
}

您可以使用在线工具通过http://json2csharp.com/JSON对象转换为C#类结构

票数 1
EN

Stack Overflow用户

发布于 2020-04-04 23:55:28

更改模型(因为standard是一个数组,而不是一个对象):

代码语言:javascript
复制
    public class League
    {
        public List<Player> Standard { get; set; }
    }

响应对象具有以下结构:

代码语言:javascript
复制
{
  "league": {
    "standard": [...]
  }
}

当您当前的模型尝试反序列化时:

代码语言:javascript
复制
{
  "league": {
    "standard": {
      "players": [...]
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61030370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档