在 C# 中从 JSON 反序列化数组

Deserialize array from JSON in C#

所以我正在尝试使用 Newtonsoft 将数组从 JSON 反序列化为 C# class。我看过教程和其他关于此的问题,但我 运行 遇到了问题,因为我想要获取的数组不在 JSON 的顶层。 JSON 的结构如下,我想在其中提取“数据”数组并将其反序列化:

 "success": true,
  "data": [
    {      
      "key": "americanfootball_nfl",
      "active": true,
      "group": "American Football",
      "details": "US Football",
      "title": "NFL",
      "has_outrights": false
    },
    {
      "key": "aussierules_afl",
      "active": true,
      "group": "Aussie Rules",
      "details": "Aussie Football",
      "title": "AFL",
      "has_outrights": false
    },
    {
      "key": "basketball_euroleague",
      "active": true,
      "group": "Basketball",
      "details": "Basketball Euroleague",
      "title": "Basketball Euroleague",
      "has_outrights": false
    }
]}

我知道我首先需要从 JSON 中提取数据对象,然后对其进行解析,但我不太确定如何进行解析。我有这个 class 反序列化 JSON:

public class SportsModel
    {       
        public bool Success { get; set; }
        public string Data { get; set; }       
    }

    public class SportsData
    {
        public string Key { get; set; }
        public bool Active { get; set; }
        public string Group { get; set; }
        public string Details { get; set; }
        public string Title { get; set; }
        public bool HasOutrights { get; set; }
    }

并且当前使用此获取顶级数据:

SportsModel data = JsonConvert.DeserializeObject<SportsModel>(response);

我想把JSON数组数据放到一个列表对象中,这样我就可以全部访问了

你能做的是;转到 visual studio 并在编辑菜单菜单中粘贴特殊内容 然后单击然后将 json 粘贴为 class。

但首先你需要先复制 json 字符串。

您只需修复此部分,让序列化程序了解您正在将 Data 字段反序列化为 SportsData 类型,而不是 string.

public class SportsModel
{
   public bool Success { get; set; } 
   public List<SportsData> Data { get; set; } 
}

更新 要将数据放入列表中,我假设您指的是这种性质的东西

SportsModel result = JsonConvert.DeserializeObject<SportsModel>(response);
var sportsDataList = result.Data;

您的 SportModels class 需要更新为:

public class SportsModel
{
   public bool Success { get; set; } 
   public List<SportsData> Data { get; set; } 
}


SportsModel result = JsonConvert.DeserializeObject<SportsModel>(response);

您将在列表中显示数据。